补数,也叫补码,有“1的补数”和“2的补数”之分,前者多称为“反码”,后者干脆就直接叫“补码”。
为什么计算机系统需要补码,推荐这篇关于2的补码。
介绍两者操作细节的文章,也不在少数,本篇不再赘述。但是数次的看到“正数的补码是其本身”这句高亮的句子,着实令人困惑。我在这里尝试解决下。
首先,对于二进制数来说,只要定好了位长,进行反码(1的补数)和补码(2的补数)其实是一件很简单的事情。在纯二进制的表示下,只有0和1,别无他物。0111(4位)的反码就是1000,补码就是1001(反码加1)。所谓正负、符号这些人赋予的意义都不存在,只有二进制数和这些简单操作。
那么,为什么会出现“正数的补码是其本身”这种说法呢?
在计算机中表示负数,如果用最高位表示符号这种“原码”方式,虽然有利于人的阅读,但不利于其本身的计算。所以系统内部就把负数统一用“其对应正数的补码”来表示,而正数自己不用改变。这样变换后,正数虽然形式上没有变,但与原码相比,含义却变了,因为符号位已经不再是符号位了,此时的正数和负数都具有了统一的“补码形式”或称都在一致的“补码编码空间”中。
原码空间到补码空间的转换,并非对每个数点都进行补码运算,只是负数需要,正数不需要而已。
简单来说,“正数的补码是其本身”,这句话想表达含义的意思是,正数在计算机“补码编码空间”中的表示和原码一致。但这绝不等价于“对正数进行补码运算,结果是其本身”。