1. 程式人生 > >位與去取餘運算

位與去取餘運算

位與也是可以用來取餘的,但是有一個條件:除數必須是2的n次冪才行。舉例子來說明

9%8=1
 1001 & (1000 - 1)
=1001 & 0111
=1 // 1001是9的二進位制表示,1000是8的二進位制表示

在二進位制計算中,眾所周知的是,一個數右移1位相當於除以2的商,而恰巧被移除出去的那一位就是除以2得到的餘數,例如

 9 >> 1
=1001 >> 1
=100 | 1
=4 餘 1

對於一個數k要除以2的n次方,也就相當於把k向右移n位,而被移出去的n位即正好是我們要求得餘數,只有當位移1時才成立。

對於一個數k要乘以2的n次方,也就相當於把k左移n位。

實際上,對於除數是2的n次方的算式,我們只需要得到被除數的低n位就可以了,而正好,對於2的n次方這樣的數,我們將其轉換為二進位制之後,它就是第n+1位為1,其餘低位都為0的數,因此我們將其減1,就得到了第n+1位為0,而其他位都為1的數,用此數與被除數k進行位與運算,就得到了被除數的低n位二進位制數,也即是                                                                                         

所以也就是  :m=2^n   

則: k%m=k&(m-1)