栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

原码 反码 补码 移码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

原码 反码 补码 移码

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号