在计算机中,负数以其正值的补码形式表达
什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如 00000000 00000000 00000000 00000101 是 5 的原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为 1,得 0;原为 0,得 1。(1 变 0; 0 变 1)
比如:将 00000000 00000000 00000000 00000101 每一位取反,得 11111111 11111111 11111111 11111010。
称:11111111 11111111 11111111 11111010是 00000000 00000000 00000000 00000101 的反码。
反码是相互的,所以也可称:
11111111 11111111 11111111 11111010 和00000000 00000000 00000000 00000101 互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上 1,所得数称为补码。
比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。
那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。
”~”运算符
二进制求补运算符(二进制反码运算符、按位反码):对在内存中存储的是补码按位取反(包括符号位)。此时,得到的结果仍为补码,需要进一步转换为原码,得到最终输出信息。
正数的原码、反码、补码是一样的。
对于负数3种码不同:
原码:第一位表示符号位,其余位表示数值。
反码:符号位不变,其余按位取反。
补码:反码加1称为补码。补码=反码+1,反码=补码-1。
1的原码、反码、补码: a = 00000000 00000000 00000000 0000001
~1的补码 b = 11111111 11111111 11111111 11111110
~1的反码 c = b -1 = 11111111 11111111 11111111 11111101
~1的原码 d = 10000000 00000000 00000000 00000010
~1 = -2
0的原码、反码、补码: a = 00000000 00000000 00000000 0000000
~0的补码 b = 11111111 11111111 11111111 11111111
~0的反码 c = b -1 = 11111111 11111111 11111111 11111110
~1的原码 d = 10000000 00000000 00000000 00000001
~0 = -1