位運算之對二的整數冪的模運算

2021-07-27 16:40:32 字數 850 閱讀 2500

左移運算子 「<<」 表示式:a << b a」<<」b 的值是:將a各二進位全部左移b位後得到的值。左移時,高位丟棄,低位補0。

實際上,左移1位,就等於是乘以2,左移n位,就等於是乘以2n。而左移操作比乘法操作快得多。

例如:

9 << 4 9的二進位制形式:0000 0000 0000 0000 0000 0000 0000 1001

因此,表示式「9<<4」的值,就是將上面的二進位制數左移4位,得: 0000 0000 0000 0000 0000 0000 1001

0000 即為十進位制的144 , 而 9*2的4次冪 = 9*16 = 144.

右移運算子 「>>」 表示式:a >> b

a>>b的值是:將a各二進位全部右移b位後得到的值。右移時,移出最右邊的位就被丟棄。

對於有符號數,如long,int,short,char型別變數,在右移時,符號位(即最高位)將一起移動,

並且大多數c/c++編譯器規定,如果原符號位為1,則右移時高位就補充1,原符號位為0,則右移時高位就補充0。

實際上,右移n位,就相當於左運算元除以2n,並且將結果往小裡取整。

例如:-25 >> 4 =-2 -2 >> 4 = -1 18 >> 4 = 1

並且要記住的是:整數的二進位制進行位移運算,剛開始是:8組4位數,從低位開始,剩下的前位 全為0

#include 

int main()

return

0; }

整數的冪運算 快速冪

題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。一開始最簡單的思路是,用乙個while迴圈直接乘出結果,太簡單 就不貼了,複雜度是o n 發現有更快的演算法,叫快速冪,複雜度為o lgn public class solutio...

巧妙的位運算及模運算

原帖 輸入2的n次方 如果突然要你輸入2的19次方,你是不是還要想一下呢?敲個524288多累啊。用位運算 1 19又快又準。乘除2的倍數 千萬不要用乘除法,非常拖效率。只要知道左移1位就是乘以2,右移1位就是除以2就行了。比如要算25 4,用25 2就好啦。判斷偶數 a 2取模是最常用的判斷方法之...

位運算 2 3 4的冪

2的冪 即數字按位展開只有一位為1,所以 num num 1 0 return n 0 n n 1 0 4的冪 相較於2的冪而言對二進位制位要求更高,不僅要求數字按位展開只有一位為1,且1的後面必須有偶數個0,即 00000100,00010000,01000000。法一 num 1 後必然是三的倍...