计算机中的原码、反码与补码

很久之前学习过的东西了,最近发现都快忘记了,重新记录一下。

1. 原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1] = 0000 0001

[-1] = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原码是人脑最容易理解和计算的表示方式.

2. 反码

反码的表示方法是:

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001] = [00000001]

[-1] = [10000001] = [11111110]

可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

3. 补码

补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001] = [00000001] = [00000001]

[-1] = [10000001] = [11111110] = [11111111]

对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.


顺便,记住几个特殊的数的补码。假如二进制位数为8,则0为0000 0000。-1为1111 1111。127为0111 1111。-128为1000 0000。


原码反码补码计算机中用于表示有符号整数的三种编码方式。 原码是一种简单的二进制表示法,最高位为符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值。例如,用 8 位二进制表示 +11 的原码是 0000 1011,-11 的原码是 1000 1011[^1]。 反码的表示规则是:正数的反码原码相同;负数的反码是在原码的基础上,符号位不变,其余位按位取反。例如,+11 的反码是 0000 1011,-11 的反码是 1111 0100[^1]。 补码的设计目的主要有两个:一是使符号位能有效值部分一起参加运算,从而简化运算规则,补码机器数中的符号位是数据本身的自然组成部分,可以正常地参运算;二是使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。其表示规则为:正数的补码原码相同;负数的补码是在反码的基础上加 1。例如,+11 的补码是 0000 1011,-11 的补码是 1111 0101[^1][^2]。 在计算机底层,通常使用补码进行数据的存储和运算,而在汇编、C 等高级语言中使用的多是原码。 ### 代码示例 以下是 Python 代码示例,用于计算一个整数的原码反码补码: ```python def get_binary_representations(num, bits=8): if num >= 0: # 正数的原码反码补码相同 binary_str = bin(num & (2**bits - 1))[2:].zfill(bits) return binary_str, binary_str, binary_str else: # 负数的原码 original_code = bin(-num & (2**bits - 1))[2:].zfill(bits) original_code = '1' + original_code[1:] # 负数的反码 inverse_code = '1' + ''.join('1' if bit == '0' else '0' for bit in original_code[1:]) # 负数的补码 complement_code = bin(int(inverse_code, 2) + 1 & (2**bits - 1))[2:].zfill(bits) return original_code, inverse_code, complement_code # 测试示例 num = -11 original, inverse, complement = get_binary_representations(num) print(f"原码: {original}") print(f"反码: {inverse}") print(f"补码: {complement}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值