您当前的位置: 首页 > 

顧棟

暂无认证

  • 1浏览

    0关注

    227博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

原码 反码 补码 移码

顧棟 发布时间:2022-03-10 01:07:33 ,浏览量:1

计算机的计算都是使用二进制。底层的数据也是"二进制表达形式的补码形式"

机器数:一个数在计算机中使用二进制的表示形式,机器数带符号,使用最高位存放符号,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的原因。

关注
打赏
1663402667
查看更多评论
立即登录/注册

微信扫码登录

0.0349s