位运算包括
&
|
^
~
<<
>>
按位与
将某些变量中的某些位清0同时保持其他位不变。也可以用来获取变量中的某一位。
例如:将int型变量n低8位全置为0,其余位保持不变。
n = n & 0xffffff00
如何判断一个int型变量n的第七位。
n & 0x80 的值是否等于0x80
按位或
按位或运算通常用来将某变量中的某些位置置1且保留其他位不变。
例如,如果需要将int型变量n的低8位全置为1,而其他位保持不变
n = n | 0xff
按位异或
按位异或运算通常用来将某些变量中的某些位取反,且保留其他位不变。
例如,如果需要将int型变量n的低8位取反,而其余位不变,则可以执行
n ^= 0xff
异或运算特点:如果a ^ b = c, 那么就有 c ^ b = a 以及 c ^ a = b
另外异或还能实现不通过临时变量,就能交换两个变量的值
int a = 5, b = 7
a= a^b
b= b^a
a= a^b
可以实现a,b值交换
按位非
0变1,1变0
左移运算符<<
左移时,高位丢弃,低位补0,a的值不因运算而改变。左移n位,等于乘以2^n。
右移运算符>>
右移时,移出最右边的位就被丢弃。a的值不因运算而改变。对于有符号数,如long,int,short,char类型变量,在右移时,符号位将一起移动,并且大多数c/c++编译器规定,如果原符号位为1,则右移时高位就补充1,原符号位为0,则右移时高位就补0。右移n位,就相当于左操作数除以2^n,并且结果往小里取整。
思考
有两个int型变量a和n(0 <= n <= 31),要求写一个表达式,使该表达式的值和a的第n位相同。
(a>>n) & 1
或者(a & (1<<n))>>n ,条件是 (0 <= n < 31)