认识原码,反码以及补码

一,原码

将一个整数转换成二进制数,就是其补码,

例如,十进制数的5的原码是:0000 0101;

十进制数的-5的原码是:1000 0101;

*注意:首位代表符号位,0为正,1为负。

二,反码

(1)正数的反码就是其原码;

(2)负数的反码就是将原码中,除符号位以为,每一位取反。

例如:

十进制数的5的反码是:0000 0101;

十进制数的-5的反码是:1111 1010;

三,补码

(1)正数的补码就是其原码;

(2)负数的补码就是反码+1。

例如:

十进制数的5的补码是:0000 0101;

十进制数的-5的补码是:1111 1011。

在计算机中,正数是直接用其原码(原码=反码=补码)表示;负数用其补码表示。

其实无论是正数还是负数,编译系统都是按照内存中储存的内容进行位运算。

原码反码补码是计算机中用于表示有符号整数的三种编码方式。 原码是一种简单的二进制表示法,最高位为符号位,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}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信笔楠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值