简介
位运算是直接对二进制数进行操作,运算速度很快,在C++中,适当使用位操作可以解决一些特定问题和提高程序性能。
基本位操作
基本的位操作符有与、或、异或、取反、左移、右移这6种。
符号 | 位操作 | 说明 |
---|---|---|
& | 与 | 1 1 为1,其余为0 |
| | 或 | 0 0 为1,其余为0 |
^ | 异或 | 相同为1,不同为0 |
~ | 取反 | 0变1,1变0 |
<< | 左移 | 全部左移若干位,高位丢弃,低位补0 |
>> | 右移 | 全部右移若干位,对无符号数,采用逻辑右移,高位补0;对有符号数,采用算数右移,补符号位,即正数补0、负数补1 |
说明:
- ~取反为单目运算,其余为双目运算。
- 位操作有一些复合操作符,如&=、|=、 ^=、<<=、>>=。
注意事项:
- 位操作在基本数据类型中只能用于整形数据和bool型,对float和double类型进行位操作会被编译器报错。
- 位操作符的运算优先级比较低,请使用括号来确保运算顺序。
- 右移操作对有符号数采用算数右移,好处是不改变数的符号,相当于除以2的效果,如要采用逻辑右移,需要先转换为无符号数。
&
与
- 仅当a为真与b为真时,结果为真。
- 判断一个数的末尾是否为1,即判断数字的奇偶性,可以用来替换 if(a%2==0)。
if((a&1) == 0