用“模”粗浅理解负数的二进制表示
本文将以8位二进制数为例,记录下自己对这个问题的疑惑和思考。
第一学期学习计概的时候,老师会这么讲:
二进制数用最高位是符号位的方法来区分正负数;
负数的补码等于反码加一;
即:负数的二进制表示为对应正数的二进制取反加1;
可是,“符号位”的规定是怎么想的?这个关于补码、反码、原码的计算方式又是怎么来的呢?当时没有细想,只是当成了一个知识点记下来了,没有什么别的体会。
今天看到一篇文章link于是重新思考了这个问题,受到一些启发。
模的引入
我们不谈严谨的数论知识,也不从数学上“模”的定义来考虑,而是从生活中的一个例子入手。
一个时钟,时针指向4,顺时针拨动7位和逆时针拨动(12-7)位的效果是一样的,都会让它指向11。
4+7==4-(12-7)
在这里没有用=的原因是,这个“效果相等”是在时钟的意义下的,并不是真的数值相等。在这里,12,就是所谓的“模”。我把它理解为一个特定集合的边界范围。
于是试图总结这样一个规律:(其实数学上极其显然)
X+Y==X-(模-Y)---------(mod 模)