C語言學習筆記之位運算求餘

         咱們都知道,求一個數被另外一個數整除的餘數,能夠用求餘運算符」%「,可是,若是不容許使用求餘運算符,又該怎麼辦呢?下面介紹一種方法,是經過位運算來求餘,可是注意:該方法只對除數是2的N次方冪時纔有效。.net

        在移位運算中咱們可知,計算機中的數據都是0和1的序列,當咱們把某個數字左移一位,該數字會擴大爲原來的2倍;而將其右移一位時,該數字就會縮小爲原來的1/2,即至關於對該數字作了一次被2整除的運算。blog

        舉例說明:博客

        11的二進制是1011,若是右移一位的話,將變成0101,也就是5。原理

        如今咱們考慮11除以8的餘數,很顯然是3;由於8是2的3次冪,求餘時至關於除以2的3次冪,也就是把1011右移3位,該過程會把1011的低3位011給移走,事實上,這個被移走的011就是11除以8的餘數!可是,咱們該如何把這個011給保存下來呢?二進制

        如今的問題就轉化爲如何保存11的二進制1011的低三位數字了——這時就是按位與運算出馬的時候了!和1作與運算會保存原來的數字,因此咱們就能夠用1011&0111來計算。那麼這個0111又是如何獲得的呢?有兩種方法,第一種是2^N-1,好比8按照此公式就得出了0111;第二種是8的二進制取反,即1000取反獲得0111。方法

        綜上所述,位運算求餘必定要注意,只適合於除數是2的N次方的狀況。其原理就是:對2的N次方求餘,就預示着數字將向右移N位;這被右移的N位,就是餘數!只要咱們再用與運算將這N位保存下來便可!數據

       設X對Y求餘,Y等於2^N,公式爲:X & (2^N - 1)或X&(~Y)。計算機

 

 

--------------------- 本文來自 RisingSunny 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/wangwenzhi276/article/details/43853617?utm_source=copy copy

相關文章
相關標籤/搜索