位运算
即是进行有关二进制的运算
一些运算符
符号 | 描述 | 运算规则 |
---|---|---|
& | 与 | 两个位都为1时,结果才为1 |
| | 或 | 两个位都为0时,结果才为0 |
^ | 异或 | 两个位相同为0,相异为1 |
~ | 取反 | 0变1,1变0 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
>> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
在编程中的一些用法
取出一个数中第一个为一的位
//取出ann中第一个为一的位
int div = 1;
while ((ans & div) == 0) {
div <<= 1;
}
用左移和右移取替换乘除二的操作
//乘二
a<<=1;
//除二
a>>=1;
判断奇偶
偶数
(a&1)==0
奇数
(a&1)!=0
两个相同的数异或的结果为0
交换两个数
void Swap(int a, int b){
if (a != b){
a ^= b;
b ^= a;
a ^= b;
}
}
位运算的用法比较的灵活,需要多加练习,培养一种对于二进制数的敏感