计算机组成原理 原码 反码 补码

本文介绍了计算机中数值表示的基本概念——机器数,并详细解析了机器数的真值及原码、反码、补码三种编码方式的区别与转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、机器数:0000 0011 1000 0011
第一位为符号位
二、机器数的真值:
0000 0001的真值 = +000 0001 = +1
1000 0001的真值 = –000 0001 = –1
三、原码、反码、补码:
原码、反码、补码是机器存储一个具体数字的编码方式
1、原码:
原码就是符号位加上真值的绝对值
原码是人脑最容易理解和计算的表示方式
2、补码:
正数的补码就是其本身;
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1
3、反码:
正数的反码是其本身;
负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

### 原码反码补码的定义 #### 1. 原码 (Sign-Magnitude Representation) 原码是一种最简单的机器数表示方法。最高位为符号位,“0”代表正数,“1”代表负数;其余各位则按二进制绝对值的形式来表示数值。 例如,8位二进制中的`0000 0001`表示+1,而`1000 0001`表示−1[^1]。 #### 2. 反码 (One's Complement) 对于正数而言,其反码与其原码相同。而对于负数来说,则需先求得该数对应的正数部分的原码,再将每一位取反(即0变1,1变0),得到的结果就是这个负数的反码。 比如,在8位系统里,`-7`的原码是`1000 0111`,那么它的反码则是`1111 1000`[^3]。 #### 3. 补码 (Two's Complement) 同样地,当涉及到正值时,补码等于原码。但对于负值情况有所不同:首先获取对应正数的原码,接着对其逐位取反获得反码之后再加上1即可得出最终结果——这就是所谓的“加一法则”。 举例说明,仍以8位为例,如果要表达`-5`的话: - 正五的原码:`0000 0101` - 对应的反码:`1111 1010`(每位都翻转) - 加上1后的补码:`1111 1011` 因此,`-5`在八位下的补码形式就应该是`1111 1011`[^2]。 ### 计算实例展示 假设现在有一个十进制整数 `-14` 需要用到七位加上一位符号位共八个比特位来进行编码: - **原码**: `1000 1110` (其中首位'1'作为符号标记) - **反码**: 将上述除开首字符外的所有数字反转得到 `1111 0001`. - **补码**: 继续给上面所得出的数据加1变成 `1111 0010`. 值得注意的是,实际应用中几乎总是采用补码而非其他两种方式存储数据,因为这可以简化硬件设计并提高效率[^4]. ```python def to_binary(n, bits=8): """Convert an integer n into a binary string with specified number of bits.""" return format(n if n >= 0 else (1 << bits) + n, '0{}b'.format(bits)) print(to_binary(-14)) # Output should be the two's complement representation of -14 using default bit length. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值