位运算
期末复习——位运算
位运算符有两类:
移位运算符:左移(<<)、右移(>>)、无符号右移(>>>)
逻辑位运算符:按位与(&)、按位或(|)、按位异或(^)、按位取反(~)
注:位运算都是基于补码进行的。
正数:原码 = 反码 = 补码(三码合一)
负数:补码 = 原码(符号位不变)按位取反 + 1(反码 + 1)
在位计算前需先将负数的原码转换为补码(正数原码即补码),进行位运算的结果仍为补码,若补码为负数,需转换为原码(正数补码即原码),再将原码转换为十进制
左移<<
写法:<要左移运算的数> << <左移的位数>
运算规则:高位舍弃,低位补0
例:15<<1
0000 1111 //用二进制表示15
0001 1110 //左移运算,第五位的0被第四位的1取代,移动后第一位补0,结果为30
结论:15左移1位相当于乘2,结果为30。
右移>>
写法:<要右移运算的数> >> <右移的位数>
运算规则:正数左补0,负数左补1
例1:15>>1
0000 1111 //用二进制表示15 0000 0111 //右移运算,第四位补0,结果为7即15/2结论:右移1位相当于除以2
例2:-7>>1
1000 0111 //-7的原码 1111 1000 //-7的反码(符号位不变,其他位取反) 1111 1001 //-7的补码(反码+1得补码) 1111 1100 //对-7的补码右移一位,负数左补1 1111 1011 //对右移后的补码-1变回反码 1000 0100 //将反码变回-7右移一位后的原码,其值为-4,即-7/2结论:右移1位相当于除以2
按位与&
运算规则:两个都是1结果才为1,其他都为0
例1:5&1
0000 0101 &0000 0001 //只有第一位都是1 —————————— 0000 0001 //结果为1例2:6&1
0000 0110 &0000 0001 //没有两位都为1的情况 —————————— 0000 0000 //结果为0
规律:奇数&1,结果为1,偶数&1,结果为0
按位或|
运算规则:只要有一个是1,结果就为1
例:5|1
0000 0101 |0000 0001 //第一位、第三位都有1 —————————— 0000 0101
按位异或^
运算规则:相同为0,不同为1
例:(键盘打字也不比手写轻松多少,偷个懒截图)
a=5,b=6;
a=a^b;
b=a^b;
a=a^b;


a=5,b=6;
a=a^b;
b=a^b;
a=a^b;
此时a为6,b为5,互换数值
按位取反~
运算规则:对整数的二进制补码进行每一位按位取反(0 变 1,1 变 0),最终结果仍以补码形式存储和解读。
例1:~5
~0000 0101 //5是正数,原码即补码,对补码按位取反 —————————— 1111 1010 //这是5按位取反后的补码,需要转为原码 1111 1001 //转为反码 1000 0110 //转为原码,值为-6例2:~-5
1000 0101 //-5是负数,先转为补码 1111 1010 ~1111 1011 //对补码按位取反 0000 0100 //取反后为正数的补码,等于正数的原码,直接读出值为4
参考资料: