位运算介绍
lkj 4/8/2022 位运算
# 位运算符
位运算符号 | 解释 | 举例 |
---|---|---|
& | 按位与(有0则0) | |
| | 按位或(有1则1) | |
^ | 按位异或(不同为1,相同为0) | |
~ | 取反 | |
<< | 左移(高位丢弃,低位补0,相当于十进制数乘2) | 补充资料 (opens new window) |
>> | 右移(正数右移、负数右移) | |
>>> | 无符号右移(同正数右移一样) |
# 原码、反码、补码
- 正数的原码、反码、补码相同
- 负数的反码相对于原码符号位不动,其余位取反,补码相对于反码加1
- 举例如下
整数 | 6 | -6 |
---|---|---|
原码 | 00000000 00000000 00000000 00000110 | 10000000 00000000 00000000 00000110 |
反码 | 00000000 00000000 00000000 00000110 | 11111111 11111111 11111111 11111001 |
补码 | 00000000 00000000 00000000 00000110 | 11111111 11111111 11111111 11111010 |
💡 最高位表示符号位,0表示正,1表示负
计算机中不管是正数还是负数,都是以补码的形式进行存储并计算的
至于为什么用补码而不是原码,其主要原因还是为了数字间的计算方便,可参考这篇文章 (opens new window)
# 右移
正数右移
正数右移高位需补0
负数右移
负数右移高位需补1
无符号右移
无符号右移和正数右移相同,都是高位补0