补码10000000为什么可以表示-128?
2017-04-27 13:28
267 查看
一、引言
本文转自知乎上 fhylhl 用户对于此同名问题的解答,本人觉得回答得非常鞭辟入里,因此咨询了作者是否可以转载,得到了肯定的回复后才进行了转载。另外,什么是补码?补码的设计意义是什么?
让我们忘记公式,来看看作者的回答。
二、正文
很多人并不理解补码。补码就是同余啊。1000000是正128你知道吧,正负128模256是同余的。加减乘可以直接算也是同余的定理决定的,而不是凑出来的巧合,哪可能凑出这种东西?8位只能表示256个数,0到255,但我还想表示一些负数怎么办呢?就用与该负数同余的正数来表示呗。-1=255,-2=254,等等。
建议脱离算数的思维方式,这其实就是一个环。模任何一个正整数(如256),可以把所有整数分类,比如模256可分256类,0 256 -256…是一类(余0类),1 257 -255…是一类(余1类),等等,这256类可看作环的元素,你看-128和128是同一个类里的(余128类),用一个代表另一个罢了。补码和普通的unsigned integers都是在每类中选一个数,unsigned integers选0到255,补码表示的有符号整数选-128到127,都是一个数恰好对应一个类。
当你明白这一切后,补码就是顺理成章的事。
练习:设计用8位二进制数表示13至268这256个数的方案。要求作加减乘运算的时候,可以直接把编码当正整数算,能得到正确结果。
作者:fhylhl
链接:https://www.zhihu.com/question/28685048/answer/41735701
来源:知乎
相关文章推荐
- 8位二进制数能表示的最小整数为什么是-128,10000000为什么是-128的补码。
- 对一个字节表示的补码10000000表示-128的解释
- 为什么补码可以表示负数
- 为什么补码可以表示负数?
- 关于-128的补码是10000000
- 为什么数在内存中要以补码表示[ZZ]
- 八位二进制数为什么表示范围是:-128~~+127?
- 补码 源码 10000000 是-128
- -128有8位二进制表示的原码、反码和补码
- 补码表示法(0,-128详解)
- 计算机中char型数为什么表示的是-128————127
- 负数在计算机中如何表示,计算机中负数为什么用补码表示?
- 反码符号-128有8位二进制表示的原码、反码和补码
- 八位二进制数为什么表示范围是:-128~~+127?
- -1为什么要用补码表示
- 八位二进制数为什么表示范围是:-128~~+127?
- [置顶] 为什么-128用二进制表示为1000000000000000?
- 为什么char能表示-128
- 数据类型:整数最小值为何不是最大值的相反数(为什么八位二进制数表示范围是:-128~127 ) ?
- 为什么要用补码表示