计算机 原码、反码、补码(相互转化)

一、基本概念

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以用补码统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

  1. 原码:二进制表示。二进制首位是符号位,0为正,1为负
  2. 反码正数,反码和原码一样;负数,符号位不变,其他各位取反
  3. 补码正数,补码和原码一样;负数,反码末位加1,有进位则进位,但不改变符号位

 

二、举个例子:(假设是字节长度为8位)

 

三、注意:(总结一下就是,-127~127都是正常转换,只有-128一个特殊的只有补码)

  1. 八位字节的二进制转化的十进制的最大 正数 为 127(0111  1111)
  2. -127只能表示(原码1111  1111)(反码1000  0000)(补码1000  0001)
  3. 八位字节的二进制转化为十进制的最大 负数 为 -128 (1000  0000)
  4. +0和-0的补码是一样的。即 0的补码只有一种表示
  5. 所以为了避免面混淆,有了-0的原码,便不能有-128的原码反码,这是8位比特位位数限制决定的
  6. 补码能表示的数的个数中,比原码反码少了一个,所以补码可以多表示一个真值为-128的数

 

这里有一个很好的文案,可以看看:

https://www.cnblogs.com/flowerslip/p/5933833.html关于 -128 ,+128,-0,+0,-1 的反码补码

# 但是在(三.-128的补码为什么是1000 0000)的数学方法的证明那里有个正负好像有点问题

 

四、比如求解  -127+128 = -1

(两者补码想加,然后转成反码,再转成原码,在把这个二进制转成十进制)

补码相加:0111  1111  +  1000  0000 = 1111  1111

转成反码(末位-1):(1111  1111)-->  1111  1110

转成原码(除符号位之外按位取反):(1111  1110)-->  1000  0001

转成二进制:(1000  0001)-->  -1

 

 

 

 

 

  • 24
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值