巧用移位操作

2021-08-01 11:38:16 字數 704 閱讀 6310

移位規則:

移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是右移有關。如果是左移,則規定補入的數全部是0;如果是右移,還與被移位的資料是否帶符號有關。若是不帶符號數,則補入的數全部為0;若是帶符號數,則補入的數全部等於原數的最左端位上的原數(即原符號位)。具體移位規則如下所示。

位移位運算子的優先順序如下:

·算術運算子 優先於 位移位運算子 優先於 關係運算子

·位移位運算子是同級別的,結合性是自左向右

typedef int uint;

下面以uint型別來說明,以下只適用於uint型別

例如,uint i = 3(對應二進位制數為00000011)左移  i <<1

則:i <<1 結果為6  (對應二進位制數為00000110)

i=3;  i <<2 結果為12  (對應二進位制數為00001100)

uint j= 3 對應二進位制數為00000011)右移 j >>1

則:j>>1結果為1(對應二進位制數為00000001)

j = 6; j>>2結果為1(對應二進位制數為00000001)

可以得出左移 i<< n位 ,結果為  i*2n

右移 j>>n位 ,  結果為 j/2n;    (最後結果,資料會截斷成uint)         

運用:

9 * 26  

9<<6;   這樣運算效率會大大提高,

巧用移位運算避免乘法運算

使用移位運算來避免乘法運算是一種常用技巧,不過乘數必須都是正整數,而且必須至少有 乙個是 2 的 n 次方,例如 2,4,8,16,32 移位運算的特點是速度快,而乘法運算速度較慢,把乘法運算轉化為移位運算可以稍微提高程式執行效率。例如 num 32 等同於num 5 2 的 5 次方等於 32 如...

關於移位操作

左移 不管是有符號數還是無符號數,數字都往左移動n位,右邊用0補足。如果左移的位數超過整數本身的位數,結果不知道。vs上測試結果是從頭開始。例子 vs,32位機器 int型別,原始值0x1,左移31位後是0x80000000。左移32位後是0x1。原始值0x11,左移31位後是0x80000000,...

進製轉換和移位操作 移位 1

final static char digits 進製轉換 查表法 param 待轉換的10進製數 param shift 每次移位數 return 轉換為對應進製的字串 static string trans long i,int shift while i 0 當前結果不為0 迴圈繼續 retu...