今天给学生上数字逻辑第一节课,主要讲了数制,后面简单提及了原码、反码和补码,碰到了两个问题:第一,十进制数转八进制数,学生练习时卡壳,不知道无从下手;第二,原本以为原码、反码、补码应该是一年级甚至中学时就应该解决的问题,实际上原来根本不是这么回事。中学老师即使讲过,估计也是对付考试的方式简单提及,并未从本质上进行讲解(那时候他们忙着对付高考,哪有闲工夫讲这些题外的知识)。
真值
首先,我们明白计算机中的数都是用二进制表示的,如3用二进制表示为:
(3)10 = (11)2
那如果-3呢?
显然,最直接的办法是用0或1来表示符号。很自然的,我们可以在数值前加符号位来表示,用0表示正数,用1表示负数。为了描述方便,我们后面统一用8位字长来举例描述,如:
(3)10 = (00000011)2
(-3)10 = (10000011)2
对于8位二进制数,原码的表示范围是:[(11111111)2, (01111111)2],即[-127, 127].
从直觉上,貌似已经解决了正负数的表示问题。但是,问题来了,第一个问题是:0的表示不唯一(计算机的准确性和唯一性遭遇挑战):
0 = (+0)10 = (00000000)2
=(-0)10 = (10000000)2
随之而来的是第二个问题,如3-5如何处理?如果用二进制的减法规则
(00000011)2 - (00000101)2 = (11111110)2 (原码中(111111

最低0.47元/天 解锁文章
1749

被折叠的 条评论
为什么被折叠?



