二进制:整理
最初的一个问题是来源于 signed byte的范围为什么是[-128,127],为什么不是[-127,127]。
下面的内我直接使用+1
和-1
进行举例
机器数与真值
一个数在计算机中的表示都是直接使用二进制,这种二进制表示方式就是机器数。因为有正负之分,所有在机器数中采用最高位来表示正(0)或者负(1)。
所以对应的+1
和-1
的机器数为:
+1 0000 0001
-1 1000 0001
机器数0000 0001
与1000 0001
对应的真值分别为 +1
和-1
。
原码
符号+真值对应的绝对值。
+1
的源码为 0000 0001
-1
的源码为 1000 0001
那么如果使用原码表示的话,signed byte的范围是[0111 1111
,1111 1111
]。
反码
反码:正数的反码是原码本身;负数的反码是符号位不变,其他位取反
补码
补码:正数的补码是原码本身;负数的补码是反码+1
原因
- 计算机中没有那么多的计算方式,
加+
是最基础的计算方法,那么对于减肥就是使用加上一个负数。 - 1-1=0=1+(-1)
如果使用原码表示 1-1 = 0 结果是错误的。
如果使用反码表示 1-1 = 0,最后的结果是0000 0000
1000 000
都表示0
,因为是+0
和-0
,所以才导致了理论的表达范围为[-127,127]
如果使用补码表示 1-1 = 0,最后的结果是0000 0000
表示0
,所以可以直接使用1000 0000
表示-128
。
网友评论