计算机中的原码、反码、补码分析

今天给学生上数字逻辑第一节课,主要讲了数制,后面简单提及了原码、反码和补码,碰到了两个问题:第一,十进制数转八进制数,学生练习时卡壳,不知道无从下手;第二,原本以为原码、反码、补码应该是一年级甚至中学时就应该解决的问题,实际上原来根本不是这么回事。中学老师即使讲过,估计也是对付考试的方式简单提及,并未从本质上进行讲解(那时候他们忙着对付高考,哪有闲工夫讲这些题外的知识)。

真值

首先,我们明白计算机中的数都是用二进制表示的,如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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值