位运算是一种用于对整数类型变量的某一位bit(或几位)直接进行操作的运算,优点是运算速度会比算术运算快;常用的运算符有 & , |,^,~,<<,>>.
&运算 :& 按位与(双目) : 将参与运算的两操作数各对应的二进制位进行与操作,只有对应的两个二进制位都为1时,结果对应二进制才为1,否则为0
例如 : 求 23 & 45
23 用二进制表示就是: 0000 0000 0000 0000 0000 0000 0001 0111
45 用二进制表示就是: 0000 0000 0000 0000 0000 0000 0010 1101
二者按位与所得结果是:0000 0000 0000 0000 0000 0000 0000 0101 # 5
| 运算 : | 按位或 (双目)将参与运算的两操作数各对应的二进制位进行或操作,只有对应的两个二进位都为0时,结果的对应二进制位才是0,否则1。
例如 : 求 23 | 45
23 用二进制表示就是: 0000 0000 0000 0000 0000 0000 0001 0111
45 用二进制表示就是: 0000 0000 0000 0000 0000 0000 0010 1101
二者按位或所得结果是:0000 0000 0000 0000 0000 0000 0011 1111 # 63
^ 运算 : ^ 按位异或 (双目)-- 将参与运算的两操作数各对应的二进制位进行异或操作,即只有对应的两个二进位不相同时,结果的对应二进制位才是1,否则为0
例如:求 23 ^ 45
23 用二进制表示就是: 0000 0000 0000 0000 0000 0000 0001 0111
45 用二进制表示就是: 0000 0000 0000 0000 0000 0000 0010 1101
二者按位异或所得结果是:0000 0000 0000 0000 0000 0000 0011 1010 # 58
异或运算还能实现不通过临时变量 就能交换两个变量的值: a^b=c ;
c^b = a;
c^a=b ;
~ 运算 : ~ 按位非 (取反 , 单目)-- 按位非运算符“~”是单目运算符。其功能是将操作数中的二进制位0变成1,1变成0。
例如 : 求 ~55
55 用二进制表示就是: 0000 0000 0000 0000 0000 0000 0011 0111
取反所得结果是: 1111 1111 1111 1111 1111 1111 1100 1000 # -56
<<左移 (双目): a << b 表示的是:将a各二进位全部左移b位后得到的值。左移时,高位丢弃,低位补0。a 的值不因运算而改变。
例如 : 求 10 << 4
55 用二进制表示就是: 0000 0000 0000 0000 0000 0000 0000 1010
左移四位的结果是 : 0000 0000 0000 0000 0000 0000 1010 0000 # 160
>>右移(双目) : a >> b表示的是:将a各二进位全部右移b位后得到的值。右移时,移出最右边的位就被丢弃。 a 的值不因运算而改变
对于有符号数,在右移时,符号位将一起移动,如果原符号位为1,则右移时高位就补1,原符号位为0,则右移时高位就补0
例如 : 15 >> 2
15的二进制表示 : 0000 0000 0000 0000 0000 0000 0000 1111
15右移2位 :0000 0000 0000 0000 0000 0000 0000 0011 # 3
15右移4位 :0000 0000 0000 0000 0000 0000 0000 0000 # 0