原码,反码,补码的概念

计算机里都是以补码的形式存储数据,电脑只能识别二进制的0和1,

一个字节(8位)为例

原码 :最高位符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。

反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。  

补码:正数的补码与原码一致,负数的补码是该数的反码加1。

原码的最高位称为符号位(为0->正,1->负)(记忆方法:符号‘0’转90度还是0,符号‘1’转90度就是-负号)

正数的原码=正数的反码=正数的补码

负数的反码=它的原码符号位不变,其他位取反(0->1,1->0)

负数的补码=它的反码+1

可以说,反码是原码要转换成补码的一个  过渡阶段。

 

 

 

例如:

                        5              -5

原码:  00000101          10000101

反码:  00000101          11111010

补码:  00000101          11111011

现在让我们来看看计算机是如何进行运算的。

        

例如:          00000101    

5+5          +  00000101    

              ————————      

                 =  00001010        2个数对应的补码相加得到的二进制为10

 5+(-5)

                  00000101

             +   11111011       2个数对应的补码相加得到的二进制为-10

          —————————

            =   100001010      

 这个时候会发现进1到第9位了,我们研究的是1个字节8个位,只需要取

前面8个位就可以了,观察发现为00001010 为-10

   打开电脑计算器点击程序员

1个字节最多能存储的数字是127

### 原码反码补码的概念 #### 什么是原码原码是一种最简单的机器数表示方法,它通过在二进制数前增加一位符号位来区分负数。对于数,符号位为`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]。 --- 相关问题
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值