位操作运算符:
位与(&),位或(|),取反(~),位异或(^),左移(<<),右移(>>)
按位与运算符“&”是双目运算符,其功能是参与运算的两个数字对应的二进制位相与。只有对应的两个二进制位均为1时,结果才为1,否则为0.参与运算的数以补码方式出现。
例如,9&5可写算式如下:
0000 1001(9的二进制补码)& 0000 0101 (5的二进制补码)
0000 0001 (1的二进制补码)
0000 1001
0000 0101
0000 0001 = 1
按位与运算通常用来对某些位清0或保留某些位。例如,把a的高8位清0,保留低8位,可做a&255 运算(255 的二进制数为0000 0000 1111 1111).
应用:
(1)清0特定位(mask中特定位置0,其他位为1,s = s&mask)。
(2)取某数中指定位(mask中特定位置1,其他位为0,s = s&mask).
安慰或运算符“|”是双目运算符。其功能是参与运算的两个数字对应的二进制位相或。只要对应的两个二进制位有一个为1时,结果位就为1.参与运算的两个数均以 补码出现。
例如:9|5可写算式如下:
0000 1001 | 0000 0101
0000 1101 = 13
应用:常用来将源操作数某些位置1,其他位不变(mask中特定位置1,其他位为0, s = s&mask).
按位异或运算符“^”.其功能是参与运算的两个数字对应的二进制位相异或。当对应的二进位相异时,结果为1.参与运算数仍以补码出现。
例如:9^5可写算式如下:
0000 1001 ^ 0000 0101
0000 1100 = 12
应用:
(1)使特定位的值取反(mask中特定位置1,其他位为0,s = s^mask)
(2)不引入第三变量交换两个数的值(设 a = a1,b = b1)
目标 操作 操作后状态
a = a1^b1 a =a^b a = a1^b1,b = b1
b = a1^b1^b1 b =a^b a =a1^b1,b = a1
a = b1^a1^a1 a =a^b a= b1,b =a1
左移(<<)和右移( >> )的区别:
左移是拿0来补位,右移是拿符号位来补位,所以位操作一定是操作无符号数。