取余运算符号为%
如7%2=1
23%4=3
那么取余运算如何通过位运算表示呢,(仅适用于余数为2^N)
答案是 X & (2^N - 1)
我们都知道,对于二进制数,左移一位相当于把这个数字变为原来的二倍,
如10b,左移一位变为100b, 从2变为了4,右移一位变为了原来的一半,如
1011b 右移一位后变为101,从11变为了5,相当于11/2=5,这时我们可以发现,右移时被丢弃的“1”,就是11/2时的余数。
现在我们举个例子,比如37/8=4 就相当于37/2/2/2=4
也就是把33的二进制100101b 向右移动三位变为100b
被遗弃的101b就是37%8的余数5,
这时我们还可以发现每个2^N通过2进制表示都是为最高位为1,其后跟随N个0的数(就是把1往左移了N位)
2^N-1则是原来最高位为0,其后跟随N个1的二进制数。
例:8 : 1000b
7 : 0111b
现在再看这个 X & (2^N - 1)公式,你就会发现这个操作就是保留需要被“遗弃”的后N位。
转载至:https://www.cnblogs.com/littleKing163/p/5695153.html



