二进制中补码的含义

作者: 赵阳_c149 | 来源:发表于2019-07-24 12:18 被阅读3次

在计算机中,数字用二进制补码来表示和存储。原码和补码这两种表示方法均有符号位和数据位。符号位的含义相同,1表示+,0表示-。而数值位的表示方法并不相同。

对于整数,原码和补码相同。

对于负数,得到他的补码需要两步:

  1. 将其原码除符号位外的所有位取反。也就是说0变1,1变0,符号位1不变。
  2. 将1#得到的值+1。

例如:在8位二进制中,-7的原码为1000 0111

  1. 将其原码除符号位外的所有位取反:
1111 1000
  1. 将1#得到的值+1:
1111 1001
数字用二进制补码来表示和存储优点:
1. 补码的补码是原码。也就是说补码和原码相互转换,其运算过程是相同的。
  • 对于正数,无论取补多少次,原码和补码都一样。
  • 对于复数,
    -7的原码为
1000 0111

补码为

1111 1001

对其求补:
将其原码除符号位外的所有位取反:

1000 0110

将i#得到的值+1:

1000 0111
2. 加法和减法可以统一处理。

为了理解这一特性,引入“模”的概念。模是指一个计量系统的计数范围,如时钟。时钟的计量范围是0~11,模=12。同理,如果将n位计算机也看成是一个计量系统,则其计量范围为0~2^n -1,模=2^n。
“模”实际上是计量器产生“溢出”的量,其值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,都可以化减法为加法运算。
例如:假设当前时钟指向10点,如果想要将其调到6点,有两种方法:

倒拨4小时,

10-4 = 6

顺拨8小时,

10+8 = 18,18%12 = 6。

也就是说,在以12为模的系统中,加8和减4的效果是一样的,因此凡是减4的运算,都可以用加8来代替。对“模”= 12而言,8和4互为补数。
将模的概念和方法扩展至n位计算机,模=2n , 相加和为 2n的两个数互为补数,减法问题可以化为加法问题。把补数应用到计算机对数的处理上,就是补码。

3. 可以将符号位和数值位统一处理。

例如,需要求 2+ (-1),假设数字用8位二进制表示,那么2的补码是

0000 0010

-1的补码是

1111 1111

则有

0000 0010 + 1111 1111 = 1

这里进位的时候,完全不用考虑符号位和数值位的区别,很大程度的精简了计算步骤。

4. 0只有一种表示方法。

取补的具体方法,主要有两种,one’s complement和two’s complement。

  1. one’s complement:
N = (2^n^ - 1) – N

这种表示方法存在着一个问题,即有两个0。
正0:

0000 0000

负0:

1111 1111

对于正0,很好理解,对于负0,可以考虑1+(-1),
1的补码

0000 0001

-1的补码

1111 1110
0000 0001 + 1111 1110 = 1111 1111

造成了数字表示和存储的冗余甚至混乱。

  1. two’s complement:
N’ = 2^n^ – N

在one’s complement的基础上改进,取反之后对得到的值+1,消除了负0。

相关文章

  • 二进制中补码的含义

    在计算机中,数字用二进制补码来表示和存储。原码和补码这两种表示方法均有符号位和数据位。符号位的含义相同,1表示+,...

  • 负数在内存中的表示方式

    在计算机中数值是以二进制补码形式存在的。 正数的补码不变 负数的补码为 原码 ->取反 -> 加一以 -112...

  • python中的原码反码和补码

    python中的原码反码和补码 原码反码和补码的概念 原码:原码是二进制数字的一种简单的表示法。二进制首位为符号位...

  • 原码反码补码

    其实数据存储在内存中都是存储的二进制,二进制又可分为原码、反码、补码。最终存储在内存中的是“补码”。 一个正数的原...

  • 二进制、八进制、十进制、十六进制转换

    1.负数的二进制使用补码 负数的二进制是采用补码计算的,比如: 1的二进制为:0000 0001 它(正数)的反码...

  • 面试题15:二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 二进制数的范围以及原码补码的区别 以八...

  • 为什么二进制数的补码等于按位取反再加1

    昨天聊到了补码的问题:在4进制中,原码1的补码是3。减去原码和加上补码的结果是一样的。大学时候,对于二进制数,求补...

  • java中byte类型

    在计算机中数据都是以二进制原码的形式存在的,而数字间的运算都是以补码的形式进行。然而补码又分为正数的补码跟负数的补...

  • 二进制补码

    13 负数同样以二进制码存储,但使用的格式是二进制补码。计算一个数值的二进制补码,需要经过下列3个步骤:(1) 求...

  • 数值是以补码表示的

    正数的补码与原补码相同 负数的补码:将该数的绝对值的二进制数按位取反后再加1 例如:求-10的补码 10的原码: ...

网友评论

    本文标题:二进制中补码的含义

    本文链接:https://www.haomeiwen.com/subject/thatrctx.html