二进制那点事儿之取模和整除

基因决定了我们人类有十根手指

所以呢我们通常数起数来都是这样

每十个数就进一位

也就说 10个“个位”(1位数)变成 “十位”(2位数)

10个“十位”(2位数)变成“百位”(3位数)

以此类推

那么

如果我们只有六根手指呢

可能就会是这样

就是每6个数进一位

也说6个“个位”(1位数)变成“十位”(2位数)

6个“十位”(2位数)变成“百位”(3位数)

以此类推哈

所以按照这个规律

二进值也是一样的

每两个数进一位

比如说2个 “个位” 变成 “十位”

2个 “十位” 变成 “百位”

两个 “百位” 变成 “千位”

现在如果给你个数

让你取出最后面一位数字

然后呢再去掉它

变成123 你会怎么计算呢

其实很容易

我们都知道

最后一位只要不是

就代表他还没来得及凑够10去进一

所以呢我们把它除以

取余数就是4了

也就是取模

那么变成123呢

一样的道理

除以10 舍去余数

也就是整除

OK那么

如果我们把一个十进制的数字整除

结果会怎样呢

我们看一下啊

等于

注意啊

这个运算里所有的数字都是十进制

好我们先把这个结果154转成八进制

我们再把1234转成八进制呢

就是

所以大家有没有发现

在八进制视角下

这样的计算也是去掉最后一位

同理我们再用1234取模

会得到

他也是八进制的最后一位

接下来好玩的就是二进制了

还是一个十进制的数

每次我们整除

潜在的

一个含义就是砍掉二进制的最后一位

取模2呢

就是获取二进制最后一位数

我们可以验证一下哈

1234对应的二进制是这个

我们再把1234整除

变成了这个

再把1234取模

就得到了最后一位

那大家还记得我们上一期的结论吗

就是任何一个数

比如

借助其二进制都可以看作这样

而且在这里后面的乘数是有规律的

每次都是2的n次方

然后每次n加

唯一的变量就是前面的那个乘数

而他就是二进制的每一位数

我们再结合本期视频

还是1234 如果我们先让x等于

那么x取模

就得到了最右面的数

再让x整除

或者右移一

我们就去掉了最后一位数

在重复上面操作呢

就能实现这个式子了

到这里呢

大家先了解了这个逻辑和原理

就可以了

后面我们再用这个逻辑来拆分理解

快速幂取模的算法

它是一个被应用在很多加密算法的

一个小算法

比如我们熟知的RSA加密

最后更新于

这有帮助吗?