二进制那点事儿之取模和整除
基因决定了我们人类有十根手指
所以呢我们通常数起数来都是这样
每十个数就进一位
也就说 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加密
最后更新于
这有帮助吗?