原码 反码 补码 移码
Posted 顧棟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原码 反码 补码 移码相关的知识,希望对你有一定的参考价值。
计算机的计算都是使用二进制。底层的数据也是"二进制表达形式的补码形式"
机器数:一个数在计算机中使用二进制的表示形式,机器数带符号,使用最高位存放符号,0代表正数,1代表负数。
真值:正数或者负数的真值就是其绝对值对应的二进制数,将第一位符号位直接用负号表示。0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1。
通过JAVA中的int型举例介绍下来概念,int型占用4个字节(byte),也就是第32位(bit)存放符号。
原码:符号位+真值,即使用最高位存放符号,0代表正数,1代表负数。
32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 | 位的序号
-------------------------------------------------------------------------------------- |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 | 3的二进制原码
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 | -3的二进制原码
反码:正数的反码即原码,也就是说正数的反码与原码一样。负数的反码是在原码的基础上,符号位不变,其余位进行取反,也就是1变0,0变1。
32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 | 位的序号
-------------------------------------------------------------------------------------- |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 | 3的二进制反码
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 | -3的二进制反码
补码:正数的补码即原码,同样的正数的补码与原码一致。负数的补码在其原码的基础上,符号位不变,其余位进行取反,最后在加1。
32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 | 位的序号
-------------------------------------------------------------------------------------- |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 | 3的二进制补码
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 | -3的二进制补码
移码:移码是对补码的符号位进行取反。
32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 | 位的序号
-------------------------------------------------------------------------------------- |
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 | 3的二进制移码
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 | -3的二进制移码
为了尽可能的简单的实现硬件的电路设计,计算机只去进行加法运算,这样对于两数想减,可以变为一个正数加一个负数。负数的计算就使用了反码来实现。但是还有一个问题就是0的表示会出现正负0的问题,于是使用了补码来统一0的编码,同时补码还可以多表示一个最小值,以int型为例,其中使用了32位来存数。
使用反码计算减法
使用补码解决0的符号位以及两个编码的问题(正负0),同时多出一个最低位。这也是int类型最小值可以是 − 2 31 -2^31 −231,而最大值是 2 31 − 1 2^31-1 231−1的原因。
以上是关于原码 反码 补码 移码的主要内容,如果未能解决你的问题,请参考以下文章