我觉得老师讲原码反码补码时能再形象一些

来源:4-6 小数的二进制补码表示法

weixin_慕设计3058955

2020-05-12

前提
机器数是什么?
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1

例子8进制的1-1=00000001-00000001=0(结果正确但是能否消除减法?)

思考:能否通过消除减法使用机器数的加法取得正确结果呢?
实验:1-1=1+(-1)=00000001原+(10000001)原=10000010原=2
结论:使用原码表示减法失败

思考:能够使用反码取代原码获得正确的值?
实验:1-1=1+(-1)=00000001原+(10000001)原=00000001反+(11111110)反=11111111反=10000000原=-0
结论:获得了正确的数,但是出现了-0的情况,因为除此之外还有+0,能否进一步消除-0

思考:能够使用补码取代反码获得唯一的0值吗?
实验:1-1=1+(-1)=00000001原+(10000001)原=00000001反+(11111110)反=0000001补+(11111111)补=00000000补=00000000原
结论:消除了减法

思考:反码能够弥补补码产生的-0,那么现在-0又代表什么
实验:(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补
结论:-0能够表示-128(实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示)

注意:8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127],而补码能够取的-128,是因为-0就代表-128值,-128只能在补码表示的范围中取到!!!-128只能在补码表示的范围中取到!!!-128只能在补码表示的范围中取到!!!

扩展:x位二进制同理可的,再说一下,8位二进制最高位表示符号位,所以8位二进制最大值是2的7次方-1,而不是2的8次方-1

程序中的小例子:Java中Byte,Short,Integer,Long,Character,Boolean,这5种包装类默认创建了数值[-128,127]的相应类型的缓存数据,但是超出此范围仍然会去创建新的对象

写回答

1回答

咚咚呛

2020-05-12

嗯,同学的意见是极好的,点赞,同学在课程的QQ群吗,可以联系一下老师。

0
0

(新版)计算机基础,计算机组成原理+操作系统+网络

编程之前先学这门课,系统补足计算机基础知识,夯实编程地基

7739 学习 · 1580 问题

查看课程