位运算
程序中的数在计算机内存中是以二进制形式存在,位运算就是直接对整数在内存中对应的二进制进行操作。
二进制
十进制转二进制:除 2 取余,逆序排列。
补码
数值有正负之分,二进制只有 0
和 1
,需要设定方法来代表正负。
原码
设定:二进制中最高位为 0
代表正,为 1
表示负。
例:0000 0110
对应的十进制为 6
,而 1000 0110
对应的十进制为 -6
。这种表示被称为 原码 。
原码存在问题,执行运算时可能会出现错误,例如 1+(-2)
的二进制运算:
0000 0001 + 1000 0010
= 1000 0011
= -3
问题就出在代表正负的最高位。
反码
设定:二进制各位置的 0
和 1
互换,例如 0000 0110
的反码为 1111 1001
。
运算前先反码,得到结果后再次反码回来。
000 0001 + 1111 1101
=1111 1110
#转换成十进制前,再次反码
=-1
但是也存在问题,如 1+(-1)
:
0000 0001 + 1111 1110
= 1111 1111
=1000 0000
=-0
补码
补码是为了让负数变成能够加的正数,也就是 负数的补码 = 负数的绝对值取反 + 1
, 例如 -1
的补码:
-1 的绝对值 1
= 0000 0001 # 1的二进制原码
= 1111 1110 # 原码取反
= 1111 1111 # +1 后得到补码
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于