当前位置:首页 > 科技 > 正文

补码和原码的转化 什么是补码

补码是一种数字表示法,常用于计算机中的二进制数运算。补码简化了负数的加法和减法运算,同时能够表示更广范围的整数。在补码系统中,正数和0的补码就是其本身,而负数的补码则是将其对应正数按位取反再加1。

文章目录:

  1. 什么是补码
  2. 补码的范围是多少?

一、什么是补码

在计算机系统中,数值,一律采用补码表示和存储。

原码和反码,计算机中,都是不存在的。

补码,其实,就是一个“代替负数”的正数。

使用了补码,计算机中就没有负数了,也就没有了减法运算。

使用了补码,可以简化算法,从而就能简化计算机的硬件。

原码和反码,都没有这种功能,所以,它们根本就没有用!

------------------------

补码(即正数),怎么能代替负数呢?

根源在于“计数系统的周期性”。

如果使用 2 位 10 进制数(0~99),计数周期就是 10^2 = 100。

此时,就可以有:

   25 - 1 = 24

   25 + 99 = (一百) 24

舍弃进位,只取两位数,这两种算法,功能就完全相同。

+99,就能代替-1。

+98,也可以代替-2。

。。。

这些“代替负数的正数”,就可称为“负数的补数”。

关系式:补数 = 负数 + 10^n。

    n 是补数的位数。

    10^n 是 n 位数的计数周期。

-------------------------

这个关系式,在计算机中,也可以使用。

8 位 2 进制:0000 0000~1111 1111 (十进制 255)。

它们的计数周期是:2^8 = 256。

计算机用二进制,补数,就改称为:补码。

求负数补码的计算公式,也是: 补码 = 负数 + 周期。

-1 补码就是:-1 + 256 = 255 = 1111 1111(二进制)。

-2 的补码是: 254 = 1111 1110。

。。。

正数,不可转换,必须直接参加运算。

所以,零和正数,并不存在补码。

-------------------------

用八位补码计算:5 - 7 = -2。

列竖式计算如下:

        5 = 0000 0101

    -7的补码 = 1111 1001

--相加-------------

   得:   (1)  1111 1110   = -2 的补码

舍弃进位,只保留八位,这就用加法,实现了 5-7。

-------------------------

补码和“符号位原码反码 ... ”,并无半点关系。

“符号位原码反码取反加一符号位不变”,数学不好的老外,才会用这些骚操作。

当你理解了“周期性”,就不必理会那些无聊的说法。

二、补码的范围是多少?

八位二进制正数的补码范围是0000 0000 ~ 0111 1111 即0 ~ 127,负数的补码范围是正数的原码0000 0000 ~ 0111 1111 取反加一(也可以理解为负数1000 0000 ~ 1111 1111化为反码末尾再加一)。 

所以得到 1 0000 0000 ~ 1000 0001,1000 0001作为补码,其原码是1111 1111(-127),依次往前推,可得到-1的补码为1111 1111,那么补码0000 0000的原码是1000 0000符号位同时也可以看做数字位即表示-128,这也解释了为什么127(0111 1111)+1(0000 0001)=-128(1000 0000)。

在计算机中数据用补码表示,利用补码统一了符号位与数值位的运算,同时解决了+0、-0问题,将空出来的二进制原码1000 0000表示为-128,这也符合自身逻辑意义的完整性。因此八位二进制数表示范围为-128~+127。

拓展资料:

补码的特性:

1、一个负整数(或原码)与其补数(或补码)相加,和为模。

2、对一个整数的补码再求补码,等于该整数自身。

3、补码的正零与负零表示方法相同。

参考资料:

以上是问答百科为你整理的2条关于补码的问题,希望对你有帮助!更多相关补码的内容请站内查找。