051_原码反码补码概念

二进制码表示法

1. 反码的范围

1.1. 反码表示法规定: 正数的反码与其原码相同。负数的反码是对其原码逐位取反, 但符号位除外。

1.2. 在规定中, 8位二进制码能表示的反码范围是-127~127。

1.3. -128没有反码。

2. 原码、反码、补码的范围

2.1. 8位二进制数

原码  -127~127

反码  -127~127

补码  -128~127

2.2. n位二进制数

2.3. 补码比其它码多一位, 这是为什么呢? 问题出在0上。

[+0]原码=0000 0000,   [-0]原码=1000 0000

[+0]反码=0000 0000,   [-0]反码=1111 1111

[+0]补码=0000 0000,   [-0]补码=0000 0000

你会发现, +0和-0的补码是一样的。即0的补码只有一种表示。

2.4. [-0]补码是怎么得来的?

负数的补码就是反码整体加一。符号位上的进位舍弃符号位。所以, 舍弃了符号位的补码的第一位是数值位, 不是符号位,符号位舍弃了。

2.5. 所以, 补码能表示的数的个数中, 比原码反码少了一个, 所以补码可以多表示一个真值为-128的数。

2.6. 机器中只有加法, 减法会变成补码的加法。

### 原码反码补码概念 #### 什么是原码原码是一种最简单的机器数表示方法,它通过在二进制数前增加一位符号位来区分正负数。对于正数,符号位为`0`;对于负数,符号位为`1`。例如,`+5`的原码为`00000101`,而`-5`的原码为`10000101`[^2]。 然而,原码存在一些缺点: 1. 它有两个不同的零值——`+0`(即`00000000`)和`-0`(即`10000000`),这会引发不必要的混淆。 2. 符号位无法直接参与到算术运算中,导致加减法操作变得复杂[^3]。 --- #### 什么是反码? 为了改进原码中的不足之处,提出了反码概念反码的设计目标之一是简化加减法运算过程。具体来说: - 对于正数,其反码与其原码完全一致; - 对于负数,则将其原码除符号位以外的部分按位取反得到反码。 举例而言: - `+5` 的反码仍然是 `00000101`; - `-5` 的反码则变为 `11111010` (即将 `10000101` 中除了第一位之外的所有比特翻转)[^1]。 尽管如此,采用反码仍然未能彻底解决问题,因为在某些情况下仍会出现异常的结果,比如 `(1)10 - (1)10 = (-0)` 这种不合理的情况[^2]。 --- #### 什么是补码? 最终,为了克服上述两种编码方式中存在的局限性,引入了更为完善的 **补码** 表示形式。以下是关于补码的一些重要特性及其定义规则: - 正数的补码等于它的原码以及反码; - 负数的补码可以通过对其反码再加一获得。 举几个例子来看一下实际应用效果如何: - 如果还是考虑数字 `+5` 和 `-5` ,那么它们对应的补码分别是 `00000101` 和 `11111011` 。注意这里 `-5` 是由之前提到过的反码 `11111010` 加上 `1` 得来的结果。 这种机制有效消除了双零现象,并使得所有的基本四则运算都可以统一成加法规则处理,极大地提高了硬件电路设计效率与可靠性[^1]。 此外值得注意的一点在于,在八位系统里特别规定了一个特殊值用来填补原本属于 “−0”的位置 —— 即 −128 (`10000000`) 并不存在相应的原码或者反码映射关系[^3]。 --- ```python def get_complement(number, bits=8): if number >= 0: return bin(number)[2:].zfill(bits) else: mask = (1 << bits) - 1 return bin((number + (mask + 1)) & mask)[2:] print(get_complement(-5)) ``` 上面展示了一段 Python 函数用于演示获取任意给定整数基于指定长度 bit 下面所对应补码字符串的方法[^4]。 --- 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值