首页 > 其他分享 >认识原码反码补码

认识原码反码补码

时间:2024-09-13 22:23:02浏览次数:9  
标签:0000 补码 1111 反码 正数 原码

目录

一.何为原码反码和补码?

(1)原码

(2)反码

(3)补码

(4)总结

二.原反补之间的简单计算

(1)补码加法

(2) 补码减法

(3) 溢出问题


一.何为原码反码和补码?

(1)原码

原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。

  • 符号位:最高位(最左边的位)用于表示符号,0 表示正数,1 表示负数。
  • 数值部分:其余的位用于表示数值的绝对值。

例如,在 8 位二进制中:

  • +5 表示为:0000 0101(最左边的0表示正数)
  • -5 表示为:1000 0101(最右边的1表示负数)

(2)反码

反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

  • 正数:反码和原码一样。
  • 负数:反码为原码的按位取反。

例如,在 8 位二进制中:

  • +5 的反码:0000 0101(与原码相同)
  • -5 的反码:1111 1010(将原码的数值部分按位取反)

(3)补码

补码:反码+1就得到补码。

  • 正数:补码与原码相同。
  • 负数:负数的补码为反码加 1。

例如,在 8 位二进制中:

  • +5 的补码:0000 0101(与原码相同)
  • -5 的补码:1111 1011(反码 1111 1010 + 1 = 1111 1011

(4)总结

数值原码反码补码
+50000 01010000 01010000 0101
-51000 01011111 10101111 1011
+00000 00000000 00000000 0000
-01000 00001111 11110000 0000

二.原反补之间的简单计算

(1)补码加法

补码的加法与普通的二进制加法相同,不区分正负数。无论是正数加正数、正数加负数,还是负数加负数,计算机只需将它们的补码相加,溢出的位自动丢弃。

例子:

例子 1:正数加法

计算 5 + 3,用 8 位补码表示:

  • 5 的补码是:0000 0101
  • 3 的补码是:0000 0011
  0000 0101
+ 0000 0011
------------
  0000 1000   (结果为 8,正确)

例子 2:正数加负数

计算 5 + (-3),用 8 位补码表示:

  • 5 的补码是:0000 0101
  • -3 的补码是:1111 1101(原码是0000 0011)(3 的反码 1111 1100 加 1)
  0000 0101
+ 1111 1101
------------
  0000 0010   (结果为 2,正确)

溢出的位被自动丢弃,所以结果保持正确。

(2) 补码减法

减法可以通过将减数的补码取反(即变成负数),然后与被减数相加来实现。因此,减法实际上也是通过加法来处理的。

例子 3:正数减法计算 5 - 3,相当于 5 + (-3),用 8 位补码表示:

  • 5 的补码是:0000 0101
  • -3 的补码是:1111 1101
  0000 0101
+ 1111 1101
------------
  0000 0010   (结果为 2,正确)

例子 4:负数减负数

计算 -5 - (-3),相当于 -5 + 3,用 8 位补码表示:

  • -5 的补码是:1111 1011
  • 3 的补码是:0000 0011
  1111 1011
+ 0000 0011
------------
  1111 1110   (结果为 -126,正确)

看上面3个例子结果都是对的,为什么到这里结果就不是-2了呢?

这是因为正数他的原反补都是相同的,我们一般都是用补码来计算两个数的相加或相减,然后再将计算出来的结果转换为原码,最后计算出最终结果,我们前面三个例子计算出来的都是正数,原反补都一样,所以是正确的。

至于这第四个例子,负数得先转换原码,我在这里教大家一个快速计算由补码转换为原码的方法:
 

从最右边开始找,找到第一个1,然后在他的前一位加1就可以得到原码
对于本题:
 1111 1110
+      1
-------------
10000 0010(显然是-2)

补充:由于计算机中采用补码表示法进行加法运算时,可以将有符号整数的加法统一为无符号整数的加法,并且如果最高位(符号位)有进位,则忽略该进位。因此,我们可以直接进行二进制加法运算而不考虑符号位的进位。

(3) 溢出问题

在使用补码进行加减法时,可能会出现 溢出。溢出是指结果超出了可表示的范围。例如,8 位补码可以表示 -128 到 127 的数值,超过这个范围的结果会出现错误。

例子 5:溢出

计算 120 + 10,用 8 位补码表示:

  • 120 的补码是:0111 1000
  • 10 的补码是:0000 1010
  0111 1000
+ 0000 1010
------------
  1000 0010   (结果为 -126,溢出)

解释:因为 8 位补码最大能表示的数是 127,但实际结果 130 超出了范围,导致溢出并得到一个错误的结果(-126)。

标签:0000,补码,1111,反码,正数,原码
From: https://blog.csdn.net/2202_75357702/article/details/142213627

相关文章

  • 原码、反码、补码及用途
    一.原码、反码、补码1.定义原码:原码是最直观的表示方法,它直接用二进制数表示一个数,包括正负号。在原码中,最高位(最左边的位)是符号位,0表示正数,1表示负数。其余位表示数值本身。例如,十进制数+5的原码表示为00000101,而-5的原码表示为10000101。反码:反码主要用于表示负......
  • 源码、反码和补码
    对于有符号数而言,原码就是一个数的二进制表示。二进制的最高位是符号位,0表示正数,1表示负数。比如56是十进制,转为二进制就是00111000,于是56的原码就是00111000,左边第一位0是符号位,后面的其他数字是数据位。计算机用数的原码进行显示,数的计算和存储是用补码进行的。用原......
  • 【计算机组成原理】2.2.3_3 补码加减运算电路
    2.2.3_3补码加减运算电路00:00各位同学大家好,在这个视频中我们会探讨怎么用电路去实现补码的加减运算。在之前的学习中我们知道了N比特加法器它的一个实现原理,给加法器输入N比特的被加数A以及N比特的加数B,同时加法器还可以接收来自于更低位的进位信息,经过加法器的电路处......
  • 原码、补码和反码
    引言1、计算机中所有的数据之间的运算都是采用补码进行的,要想知道一个数据的补码,就必须得先知道其反码,要想知道反码,就必须先知道其原码2、上面所提到的原码,反码,补码其实都是二进制的形式3、我们看到的结果都是原码转10进制之后的结果原码:最高位为符号位,其余位为数值位正整数:......
  • Python二级专项考点(原码、补码、反码)
    以下内容皆为本人原创,制作实属不易,请各位帅锅、镁铝点点赞赞和关注。OK,正片开始了一.定义(通俗易懂版)原码:原码是最直观的表示方法,它直接用二进制表示数值,最高位作为符号位,0表示正数,1表示负数。剩下的位表示数值本身。例如,十进制的+5在原码表示为00000101,-5则表示为100001......
  • 操作符详解(内含二进制与原、反、补码知识点)--还有超详细图解!一看就会!
    前言今天给大家分享一下C语言操作符的详解,但在此之前先铺垫一下二进制和进制转换与原码、反码、补码的知识点,都有详细的图解,也希望这篇文章能对大家有所帮助,大家多多支持呀!目录前言一、二进制和进制转换1.  10进制转化为10进制​2.  2进制转化为10进制 ​2.......
  • 计算机补码存储
    以下过程用8位的有符号char表示数据。1.计算机为什么用补码存储整数加法运行计算机是按照二进制存储的,并且计算机只会做加法,不会减法。首先看下加法,例如1+1=20000000100000001——————————00000010如果是1-1呢,因为计算机不会减法,......
  • 二进制与其他进制整数部分的相互转换、原码、反码、补码
    一、进制的转换(二进制与其他进制)①二进制、八进制、十进制、十六进制均是数值的不同表示形式2进制的数是由0、1组;8进制的数是由0到7组成10进制的数是由0到9组成;16进制的数是由0到9,以及a到f组成②10进制是逢10进1,2进制是逢2进1,依此类推可知n进制是逢n进1③二进制转......
  • 二进制及原码反码补码
    目录一.进制及转换1.二进制和进制转换1.12进制转10进制1.210进制转2进制1.32进制转换8进制1.42进制转换成16进制二、原码、反码、补码一.进制及转换2进制、8进制、10进制、16进制是数值的不同表现形式。比如:数值13的各种进制表现形式:13的2进制:1101   ......
  • 【每日一题 | 组成原理】补码溢出判断
    题目题型总结带符号的定点数表示方式有4种,分别是原码、反码、补码和移码,他们都由两部分组成,分别是符号位和数值位,这四种编码方式非常重要,要熟练掌握他们之间的转换和与真值间的转换。这里我们重点看一下补码:也就是说,补码是比其他编码可以多表示一位数据的,也就是可以取......