为什么取反加1得到的是这个

如题所述

取反加一,通常是指:求补码的方法。

其实,求负数的补码,是有公式的:

  补码 = 负数 + 2^n, n 是位数。

正数,不存在变换成补码的问题。

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

为什么是“取反加一”?

下面用 4 位二进制数来说明。

假设一个负的二进制数是:X =-xxxx。

其中的 xxxx,是二进制的绝对值,这是一个正数。

按公式,[X]补 = -xxxx + 2^4

        = -xxxx + 1 0000。

式中的 1 0000,可以写成:1111 + 1。

代入后,[X]补 = 1111-xxxx + 1。

式中的 1111-xxxx:

  如果 x 是 0,1-x 就是 1。

  如果 x 是 1,1-x 就是 0。

  所以,1111-xxxx,就是【对绝对值取反】。

式中的 + 1:

  就是在取反之后,再加上 1。

因此, X 的补码就是:【绝对值取反、加一】。

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

注意:这里说的取反,只是对负数的绝对值 xxxx 取反。

在这里,既没有用原码,也没有用反码。更没有“符号位不变”。

所以,求补码,与“原码、反码和符号位”没有任何关系。

其实,原码反码符号位,都是无用的。

特别是-128,它根本就没有原码和反码!

只有用“绝对值取反加一”,才能求出-128 的补码。

那么,书上,总是讲“原码反码符号位”,有什么意思呢?

真是怪事。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-02-15
其实说简单点,+1的原因就是为了有符号数多出一个数的编码,并且消除了+0与-0的表示。 如果不+1,8bits的编码只能表示-127 ~ 127,而出现+0与-0的编码,即00000000与10000000。 如果+1后,8bits的编码能够表示-128 ~ 127
第2个回答  2023-10-11
接第一个回答,对符号位的理解。以4位二进制为例,0一15共16个数,0一7都为0xxx,8一15都为1xxx,8一15作为-8一-1的补数
相似回答