深入理解补码

补码黑历史

对于每个计算机专业的同学,刚开始都会接触到二进制转换、原码、反码、补码的知识。

国内教材上是如下定义的:

原码:最高位为符号位,0代表整数,1代表复数,非符号位为改数字绝对值的二进制表示。如127的原码为 0111 1111,-127的原码为 1111 1111。

反码:正数的反码与原码一致;负数的反码是对原码按位取反(符号位不变)。如127的反码为 0111 1111,-127的反码为 1000 0000。

补码:正数的补码与原码一致;负数的补码是该数的反码加1。如127的补码为 0111 1111,-127的补码为 1000 0001。

记住上述的定义和转换方法,通过考试so easy。可是,如果做个有心人,难免会有两点疑惑:1)为什么负数和正数的规则会不同,这和我们学习其他概念方式差别很大;2)补码到底有什么用,引入补码本质是为了解决什么问题?

带着上面的疑问,对比下国外的计算机教材的讲解,国内的教材只写结论,对技术产生的背景几乎完全忽略,实际上是本末倒置。如果理解了补码背景,彻底理解补码并不太难。

为什么需要补码

补码是一个工程问题,它是为解决特定工程问题而引入的。

对于8比特的二进制编码,最多可以表示256个不同的值,如果没有负数,我们可以用来表示0~255,如果有负数,我们可以分别表示-128~127。

计算机应该如何表示负数呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值