计算机组成原理:关于原码和补码的问题

(此博客与标签无关。标签是必填,找不到合适的而选的)

一.问题发现

不同代码制的真值范围表里,我算了一下补码1000,0000对应的真值,发现了问题。

【考试肯定不会考这个】

1计算方法:

首先符号位是负,所以符号位不变,对其他位置取反加1。(补码原码互相转换的规则)

2计算纠结ing:

加1的时候发现有进位,如果去掉这个进位不让其影响到符号位,结果原码是1000,0000=-0(10)看表发现补码1000,0000的真值是-128。计算错误

如果保留这个进位而且不影响符号位,那么就是1,1000,0000=-128。感觉不科学。

3关键点:

在只有8位代码的限制下:-128是没有原码的,没有原码就没有反码,这样就不能用取反加1这个计算方法算补码的原码了。

二.解决

1科学的方法(你得知道8位二进制数的模是多少)

回到补码本身的定义上去,按照定义来求补码,就用不着涉及原码反码。

看不懂下一段就去搜定义吧。

(以8位二进制数为例)拿到一个补码先判断正负,正的不用变直接算真值,负的用模256减去【1000,0000】作为无符号数时的真值128,得出的差就是这个负数的绝对值128,这个负数就是-128。-128就是这个补码的真值。

理解了就是爽方法,不理解也不会考你捏。

2无数学依据的偏法

求补码1000,0000的真值:符号位不变,取反加一后不去掉那个进位,同时不要忘记符号位,就可以得到1,1000,0000=-128。

3多余的会绕人的解释

补码的作用就是把模变成正负两部分,以8位二进制为例,模是256:正部分是+0~+127,负部分是-1~-128(因为计算机存二进制从全零到全1都要有意义,而第一位拿来当符号位了)。其实特殊的(这个特殊指的是相对于大众爱用的取反加1方法)就是由正数转变为负数的那一个数也是就1000,0000。

        取值范围没有-0的解释:

-0由原码1000,0000求补码是1,0000,0000。而因我们限制了8位(本次计算机只存8位)所以去掉1,得-0补码=0000,0000。而0000,0000同时也是+0的补码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值