首页 > 其他分享 >二进制下的补码、反码、原码——适用于有符号整数

二进制下的补码、反码、原码——适用于有符号整数

时间:2023-06-13 15:35:50浏览次数:29  
标签:真值 反码 二进制 补码 111 原码

简单定义

简单起见,我们这里只考虑三位二进制数所能表示的范围,即${-4, -3, -2, -1, 0,\ 1,\ 2,\ 3}$。

机器数和真值

一个数在计算机中的二进制表现形式,就是这个数的机器数(相当于数的原码)。 例如,$-3$ 的机器数即为 $111$,$2$ 的机器数为 $010$。

机器数在考虑最高位为符号位的情况下,换算出来的值就是真值,例如 $111$ 的真值为 $-3$,而形式值为 $7$;$010$ 的形式值和真值都为 $2$。

原码、反码、补码

有符号整数的原码就是它的机器数,正数的反码与原码相同,而负数的反码则是符号位不变,其余位取反

正数的补码(Complement)不变,负数的补码则是它的反码+1,例如 $-1$ 的反码为 $110$,补码为 $111$。

为什么要用补码?

使用补码可以解决减法运算的问题。 例如 $2 - 1 = 2 + (-1) = 010 + 111 = 001 = 1$ ($1001$ 去掉超出的最高位)。

使用原码或者反码都不好处理这个问题。

为什么补码会有这个效果?

我们首先要意识到一点,$-1$ 的补码为 $111$,$111$ 对应的形式值为 $7$,而 $7 - (-1) = 8$。

例如,当我们使用 $2 - 1$ 时,相当于 $2 + 7 = 9$,然而,由于我们只能表示 $-4 \sim 3$ 这个范围内的所有数,大于 3 的数,就变成了 $9\ %\ 8 = 1$。

或者我们可以从循环的角度考虑:${-4, -3, -2, -1,\ 0, \ 1,\ 2,\ 3,-4,-3,-2,-1,\ 0,\ 1,\ 2,\ 3}$,正好循环到 $1$。

从数学的角度,$-1$ 与 $7$ 对 $8$ 同余,那么 $(2 + -1)\ %\ 8 = 2\ %\ 8 + (-1)\ %\ 8 = 2\ %\ 8+7\ %\ 8=(2+7)\ %\ 8$。($8$ 对应开始提到的用三位二进制表示)。

注意:$-4$ 没有原码和反码表示,补码为 $100$。(可以理解为由 $011 + 1$ 得到)

标签:真值,反码,二进制,补码,111,原码
From: https://www.cnblogs.com/zwyyy456/p/17477661.html

相关文章

  • 原码,补码,反码
    在计算机系统中,数值都是用补码来存储的。主要原因是:使用补码,可以将符号位和其它位统一处理,同时,减法也可以按照加法来处理,如果最高位有进位,则进位被舍弃。以一个字节为例正数的补码和反码都跟原码是相同的。对于负数则不同,负数的反码是将原码除符号位以外的各位取反,而负数的补码则是......
  • 计算机基础中什么是原码,反码,补码和移码?各自有什么用途?
    在计算机基础中,原码、反码、补码和移码是用于表示和处理有符号整数的编码方式。它们各自具有不同的定义和用途。在本文中,我将详细解释每种编码方式,并提供实际例子以加深理解。原码(Sign-MagnitudeRepresentation):原码是最简单的整数表示方法,直接使用二进制表示数值,并用最高位表......
  • 原码和补码
    原码和补码1.原码原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值[+1]原=00000001[-1]原=10000001第一位是符号位.因为第一位是符号位,所以8位二进制数的取值范围就是:[11111111,01111111],即[-127,127]2.补码补码的表示方法是:正数的补码......
  • java基础-原码、反码、补码
    原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负。例如,56,它的原码是00111000反码:正数的补码反码是其本身,负数的反码在原码的基础上,符号位不变,数值取反,0变1,1变0。补码:正数的补码反码是其本身,负数的补码是在其反码的基础上+1。计算机中的存储和计算都是以补码的形式进......
  • Java原码、反码、补码
    二进制的最高位是符号位:0表示正数,1表示负数(0->01->-)正数的原码、反码、补码都是一样(三码合一)负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)负数的补码=它的反码+1,负数的反码=负数的补码-10的反码、补码都是0java没有无符号数,换言之,java中的数都是有符号的在......
  • 原码、反码和补码
    1、机器数和真值一个数在计算机中的二进制表示形式,叫做这个数的机器数,而这个数即为该机器数的真值。机器数是有符号的,最高位为0表示正数,为1表示负数。2、原码最高位为符号位,0表示正数,1表示负数。其余位为真值的绝对值。一个字节的空间通过原码可以表达[-127,127],分别为1111......
  • C语言中的位运算符和源码反码补码的浅解
    位运算符【与(&);或(|);非(~);异或(^);移位运算符(<<和>>)】对于有符号(正负)的而言:1)二进制的最高位是符号位:0表示正数,1表示负数2)正数的原码,反码,补码都一样3)负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)4)负数的补码=它的反码+1 5) 0在计算机种分+0与-0,它们的原码,补码,反码......
  • C语言 原码 反码 补码
    1.任何类型的数据在计算机中都是以二进制补码形式存储2.原码:最高位为符号位,用0表示正数,用1表示负数,其他位是相应数的2进制数反码:除符号位外按位取反,0变为1,1变为0补码:反码再加13.正数的原码反码补码都相同65的原码反码补码都是:0000000000000000000000000100000......
  • C#原码,补码,反码以及取反
    在取反的二进制数中最高位是符号位(0代表正数,1代表负数)原码:将数值转化为2进制数,将最高位数转变为相对应的符号位反码:原码为正数的反码就是本身;原码为负数的反码就是符号位不变,其余数 0变1,1变0。补码:正数的补码就是本身;  负数的补码是反码符号位不变,最后一位+1......
  • C#原码,补码,反码以及取反
    在取反的二进制数中最高位是符号位(0代表正数,1代表负数)原码:将数值转化为2进制数,将最高位数转变为相对应的符号位反码:原码为正数的反码就是本身;原码为负数的反码就是符号位不变,其余数 0变1,1变0。补码:正数的补码就是本身;  负数的补码是反码符号位不变,最后一......