补数(complement)是对于给定的进位制,相加后能使自然数 a 的位数增加 1 的最小的数。可以在计算电路中,代替减 进制表示自然数 至少需要 位数字,规定
例如,十进制自然数 61 关于基数 10 的补数是 的基数的补数 加上 ,可以得到位数多一位的最小的自然数( 的减基数的补数 加上 ,可以得到位数不增加的最大的自然数( 在上下文中明确的时候,“在 进制中”的描述通常被省略。
但是,在基数不明确的情况下,“,减基数的补数称为 。二进制中,基数的补数称为 ,减基数的补数称为 。其他进制也有类似的称法。一些人,如高德纳,建议采用撇号区分。这样,指的是四进制中的基数的补数。而指的是五进制中的减基数的补数。但是,这并不是普遍的做法,而且在几乎所有情况下进制是明确的。多数作者写做 和,一些格式手册建议采用 和,不采用撇号。
对于N进制的自然数a,从个位开始的各位数字
规定不能为0。规定的各位为:
这时,N进制形如的
数 即称为“ 的关于 的补数”。
求十进制数 2304671 的补数。由于 9 = 2 + 7 = 3 + 6 = 0 + 9 = 4 + 5 = 6 + 3 = 7 + 2 = 1 + 8 ,令N=9时,自然数2304671对应的补数为 7695328 。7695328 + 1 = 7695329 ,因此N=10时,自然数2304671对应的补数是 7695329。
二进制中有 1 + 1 = 0, 1 + 0 = 1,求1的补数只需简单地将0与1相互替换。(位操作中的逻辑非运算)。
求二补数(即补码),只需要将1的补数加1。
JIS X 0005:2002 情报処理用语(データの表现) 05.08
Donald E. Knuth ‘The Art of Computer Programming Vol. 2 Seminumerical Algorithms Third Ed. 日本语版’ アスキー、2004年、191页。 (ISBN 4-7561-4543-4)