补数的概念:
今天在浏览各大编程练习题库时,发现一个快被自己忘却的概念:补数;
例如时钟指示为6点,想要它指向3点,可以按顺时针方向将分针转9圈,也可以逆时针方向转3圈,结果是一致的。
由于时针转一圈为12小时,而其中12在时钟里是不被显示而自动丢失的,即15-12=3,15点和3点在时钟表示上是一致的。
想象一下,在时钟这个问题上,任何时候时针向顺时针转9圈和逆时针转3圈的效果都是一致的,我们将方向定位正负,即-3与+9等价。而数学上称12为模写作(mod 12),而称+9是-3以12为模的补数。
记为:-3 +9(mod 12) -4 +8(mod 12) -5 +7(mod 12)
可以将模理解为一个足够大的正数,足够大到比你运算所有数字的绝对值都要大。
【以上截取自《计算机组成原理·第二版》唐朔飞著P221】
因此在模确定的情况下:
正数的补数为其自身。
一个正数和一个负数互为补数时,两数的绝对值之和为模。
一个负数可用它的正补数来代替,而这个正补数可以用模加上负数本身来得到。分析:
在现在讨论的这个问题中(计算机存储),数的存储是以二进制进行存储的,所以模就是2的幂次方。
换而言之,此时的补数就相当于一个数(原码)的反码,即 补数 ==》反码;
例如 5 的原码:101, 那么 5 的反码:010, 即 5 的补数是 2 ;
可能大家会觉得既然是反码,为何不直接用(~)取反喃。答案是肯定不行的。
因为一般而言就unsigned int来说是32bit,这简单举例一下:
数的补数 -- 编程技巧
最新推荐文章于 2023-04-08 20:59:40 发布