凡是呈现明显周期性的,比如十二生肖(以十二为周期),比如星期(以 7 为周期),比如天干(以 10 为周期),比如地支(以 12 为周期),最佳的解决方案就是取模(或者简单地说对该周期取余数)。
两个整数间能够整除(余数为 0)的全部意义正在于 ⇒ 实现均分;
10 个小朋友,两两分组,共分 5 组;
10 个小朋友,55分组,共分 2 组;
在比如质数个小朋友(如 7 个),就没办法实现均匀的分配人数了;
在 C语言的环境下,将一个整数对 2 不断地做整除:
0/2 ⇒ 0, 1/2 ⇒ 0
2/2 ⇒ 1, 3/2 ⇒ 1,
4/2 ⇒ 2, 2/2 ⇒ 1
5/2 ⇒ 2, 2/2 ⇒ 1
也即除了 0/1 之外的任何正整数,不论是奇数还是偶数,不断地对 2 整除的最终结果都会是 1;
15/2 = 7 /2 = 3 /2 =1
1. 截断低位与抹除高位
如果一个数(二进制形式 n 位)对 2k 整除和取模:
(1)整除是截断低位(k),保留高位(n-k);
(2)取模运算是抹除最高比特位(要求 k = n-1);
不妨以 10(1010) 和 8(1000) 为例:
(1)整除:10/8 == 1
(2)取模:10%8 == 010 == 2
2. 整除:降低分辨率,取模运算: