原码、反码、补码详解

24 篇文章 0 订阅

原码

原码表示法

用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。

优缺点

采用源码表示法简单易懂,即符号位加上二进制数的绝对值,但他最大的缺点就是加法运算复杂。

加法运算复杂,什么意思呢?

  • 如果是同号相加,则两数的数值相加。
  • 但如果是异号相加,则要进行减法,而在进行减法时
    1.首先还要比较绝对值的大小
    2.然后大数减去小数
    3.最后还要结合结果选择恰当的符号

反码

反码表示法

正数的反码还是等于原码
负数的反码就是他的原码是除符号位外,按位取反。

举例

(1)3是正数,反码与原码相同,则可以表示为0011
(2)-3的原码是1011,符号位的“1”保持不变,数值位(011)按位取反得(100,所以
-3的反码为1100

补码

补码表示法

正数的补码等于他的原码
负数的补码等于反码+1(这只是一种算补码的方法,只不过是补码正好就等于反码加1罢了)

补码还有另一种计算方法

负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。

以上两种方法只是补码的计算方法,而不是定义,不要误解为定义。

补码就是负数在计算机中的二进制表示方法

举个例子

例如:-5的二进制是啥呢?
5的二进制原码为:0000 0101
反码为:1111 1010
补码为:1111 1011(这就是-5在计算机中的表示方法

补码的定义

在《计算机组成原理》1中,以钟表为例说明补码概念。

假设现在的标准时间为4点,而有一只表已经7点了,为了校准时间可以采用两种方法:

  1. 将时针退7-4=3格
  2. 将时针向前拨12-3=9格

这两种方法都能对准到4点,由此可以看出,减三和加九是等价的。9和(-3)是对12的补码,可以用数学公式表示为:
            -3=+9   (mod 12)
mod 12的意思是12为模数,这个“模”表示被丢掉的数值。上式在数学上称为同余式

上例中的之所以7-3和==7+9(mod12)==等价,原因是钟表的指针超过12后,就将12自动丢掉了,最后得到16-12=4.同样地,以12为模时: 
                           -3=+9   (mod 12)
                           -3=+9   (mod 12)

从定义中我们可以得到一个结论,就是负数用补码表示时,可以把减法转化为加法。
通俗点说就是:加一个负数(减一个数)=加上这个数的补码(mod 模数)

补码转十进制

正数

一个数如果为正,则它的原码、反码、补码相同;一个正数的补码,将其转化为十进制,可以直接转换。

负数

负数就比较麻烦了,这里介绍两种方法:

方法一
          在这里插入图片描述

例如:(11111010)
=-27 * 1 + 26 * 1 + 25 * 1 + 24 * 1 + 23 * 1 + 22* 0 + 21 * 1 + 20 * 0
=-128+64+32+16+8+0+2+0
=-6

方法二:

1、先对各位取反;
2、将其转换为十进制数;
3、加上负号,再减去1。
例如:(11111010)

  • 首先最高位为1,是负数,先对各位取反得00000101
  • 转换为十进制数得5
  • 加上负号得-5,再减1得-6

  1. 《计算机组成原理》(第五版·立体化教材) 白中英、戴志涛主编 ↩︎

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
原码反码补码计算口诀是: 1. 原码:符号位加上真值的绝对值。 2. 反码:将原码中的符号位保持不变,其余位取反。 3. 补码反码加1。 例如,对于一个8位二进制数,如果要计算其反码,可以按照以下步骤进行: 1. 将符号位保持不变。 2. 将其余位取反。 对于补码的计算,可以按照以下步骤进行: 1. 先计算其反码。 2. 在反码的基础上加1。 这样,就可以得到原码反码补码的计算结果。 #### 引用[.reference_title] - *1* [原码, 反码, 补码的基础概念和计算方法](https://blog.csdn.net/Chinajsczlymyc/article/details/126910306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [(转)java 原码反码补码计算 以及 取反运算,原码反码补码运算公式](https://blog.csdn.net/PacosonSWJTU/article/details/128604733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [原码,补码,反码概念和计算方法详解](https://blog.csdn.net/qq_39541098/article/details/122729622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值