位與去取餘運算
阿新 • • 發佈:2018-12-15
位與也是可以用來取餘的,但是有一個條件:除數必須是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)