计算机原码、反码、补码理解

计算机使用一定的编码方式进行存储,原码、反码、补码是机器存储一个具体数字的编码方式

1 原码 

第一位表示符号 正数第一位为0,负数第一位为1,其余位表示值;以8位二进制表示

+1 原码 0000 0001

-1  原码 1000 0001

第一位为符号位(正负数符号位),所以8位二进制原码范围为 

1111 1111 ,0111 1111  即 -127,127

原码是人容易理解的计算表示方式

2 反码

正数的反码就是其本身

负数的反码是在原数基础,符号位不变(第一位不变),其余各个位取反。

+1  原码  0000  0001   反码  0000 0001

-1  原码   1000 0001    反码  1111  1110

负数的反码是不可直观看出,最好转换成原码方式进行计算,就是上例子中

反码 1111  1110  转换成原码  1000 0001 ,就是-1了

3 补码

正数的补码就是其本身

负数的补码是在原数基础,符号位不变(第一位不变),其余各个位取反,再+1 

其实负数的补码,是在负数的反码基础+1 即可

+1  原码 0000 0001   反码 0000 0001  补码 0000 0001

-1  原码  1000 0001  反码  1111 1110   补码  1111  1111

跟反码相同,不可以直观看出,负数的补码转换成原码进行计算,方便理解

补码1111 1111 先减一 1111 1110(现在反码形式了) ,第一位(符号位不变),

其余各位取反  1000  0001(原码形式了) -1 

原码是最容易理解为什么还需要引入反码和补码呢?

计算机运算只保留加法方式,为了解决原码减法的问题,出现了反码

例如   1-1 = 1+(-1)= 原码 0000 0001 + 1000 0001 = 反码 0000 0001 + 1111 1110 = 反码 1111 1111  

= 原码 1000 0000 = -0 

但是在 +0 和 -0 其实表示为0 ,二进制位 0000  0000 ,1000 0000,为了解决0的

符号问题以及0的两个编码问题,出现了补码

1-1 = 1+(-1) = 原码 0000 0001 + 1000 0001 = 补码 0000 0001 + 1111 1111 

= 补码 1 0000 0000(1没有在这个1字节里面) = 原码 0000 0000 

这样0就用 0000  0000 表示了,就没有 -0的存在了

同时可以使用 1000 0000 表示-128

-1 + -127 = 原码 1000 0001 + 1111 1111 = 补码 1111 1111 + 1000 0001 = 补码 1000 000 

=反码 1111 1111 = 原码 1000 0000

这个地方 反码 1000 0000 向反码转换可以 先原码-128 是 -128为正数 1000 0000

这个第一位为1 应该是符号位,溢出丢弃进位法则:在用有符号整形表示二进制数时,当后面的非符号位

发生溢出是,符号位不变,直接丢弃溢出为的进位

-128 原码 1000 0000 最高位1表示符号位,后面7位发生溢出,进位丢弃,符号位不变

反码 1111 1111  补码 1000 0000 反码末位加1,使后7位再次溢出,进位丢弃,符号位不变

综上所述,使用补码,修复了0的符号存在的-0和+0问题,还能够多表示一个最低数

即8位二进制,使用原码或反码表示范围 -127,+127;

使用补码表示范围 -128,127;机器使用补码存储在补码表示是多保存一个最小值

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值