C C 移位運算

2021-08-19 16:40:01 字數 872 閱讀 4380

c/c++移位運算

一、移位運算子及其規則

移位運算子就是在二進位制的基礎上對數字進行平移,是在補碼的基礎上進行操作的。按照平移的方向和填充數字的規則分為三種:<<(左移)、>>(帶符號右移)、>>>(無符號右移)。

左移運算子的規則:

(1).int型別數值實際移位的次數是和32的餘數,移位33次和移位1次得到的結果相同;

例如int a=1,b=32; a《在程式預處理階段,編譯器會自動執行b=b&31;(乙個數的餘數,即與這個數減一后做位and運算),因此b=0,所以a<(2).byte、short和char型別移位的結構會變成int型別,自然要滿足規則(1)

(3).long型別數值實際移位的次數是和64的餘數,移位66次和2次得到的結構相同。

右移運算子的規則:沒有左移的那些要求

二、三種移位運算子的介紹:

(1)左移運算子(<<)

語法格式:需要移位的數字《移位的次數;

規則:高位移出捨棄,低位的移入補零;

數學意義:在數字沒有溢位的前提下,對於正數和負數,左移一位都相當於乘以2的1次方,左移n位就相當於乘以2的n次方。

(2)帶符號右移運算子(>>)

語法格式:需要移位的數字》移位的次數;

規則:低位移出捨棄,高位的空位補符號位,即正數補零,負數補1;

數學意義:對於正數,當移出的位中沒有1時,右移一位相當於除2,右移n位相當於除2的n次方;對於負數,當移出的位中沒有0時,右移一位相當於除2,右移n位相當於除2的n次方。

(3).無符號右移運算子(>>>)

語法格式:需要移位的數字》移位的次數

規則:低位移出捨棄,高位補零。對於正數來說,與(2)相同,而對於負數則不同;

數學意義:正數與(2)相同,負數無數學意義。

c c 位操作 移位運算

在px4中進場可以看到 define mask use gps 1 0 bool not using gps params.fusion mode mask use gps control status.flags.gps 所以我們需要知道這個 1 0 到底是多少,且 是啥,咋運算出來的 1 0 1...

C C 移位計算代替乘除運算

測試移位和乘除的比較,發現移位比乘除運算快乙個位數的速度,但是難點在於判斷是否是2的冪次級的數,如果不是還得通過 拆分到2的冪次 上分子的累和,然後通過移位得到2的次冪數這樣 下列 只是簡單的判斷是冪級數則移位運算,不是則正常計算,不是完全都是移位算,之後如果找到方法判斷更快在更新 c c 1 in...

C C 中移位實現乘除法運算

用移位實現乘除法運算 a a 4 b b 4 可以改為 a a 2 b b 2 說明 除2 右移1位 乘2 左移1位 除4 右移2位 乘4 左移2位 除8 右移3位 乘8 左移3位 通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。大部分的c編譯器,用移位的方法得到 比呼叫乘除法子程式生成的...