無符號位移運算注意

2021-09-29 06:27:09 字數 743 閱讀 3826

位運算有三種,分別是帶符號位移運算與無符號位移運算,其中帶符號位移運算又分為左移(<>),符號位均參與移動,只有負數進行左移時最高位補1,其它情況均在空位處補0,而無符號位移運算只有右移(>>>),並且向右移動時正負數的高位均補0,正數不斷向右移動的最小值是0,而負數不斷向右移動的最小值是1(想了很久為什麼負數不斷向右移動最終的最小值會是1)

比如35的補碼是00100011,不斷的右移,就會在最高位不斷地補0,直到移動到8位全為0為止,這看起來挺好理解的。

那如果是負數呢?

如果有乙個32位的整型負數,可以知道它的最高位為1,但是根據無符號位移運算的規則,不斷地向右移動,空位補0,那麼該負數的最小值也應該為0呀,對不起,我想錯了。因為在實際的程式設計中,整型數上移動的位數是字長的整數倍時,無論是否帶符號以及移動方向,均為本身。因為移動的位數是mod32,比如乙個32位的整型數,右移1位就等價於移動1位,但是右移33就可以計算成33mod32 = 1,因此還是移動1位,如果向右移動32,則可以計算成32 mod 32 = 0等價於沒有移動,所以可以得出負數不斷的向右移動最小值為1(最右邊的乙個1),64位的長整型同理。

輸入:

輸出:

char,byte,short位移運算時注意事項

對char,byte或者short進行移位處理,那麼在移位進行之前,它們會自動轉換成乙個int。只有右側的5個低位才會有用。這樣可防止我們在乙個int數里移動不切實際的位數。若對乙個long值進行處理,最後得到的結果也是long。此時只會用到右側的6個低位,防止移動超過long值裡現成的位數。對ch...

位移的單位符號 位移感測器符號

位移感測器符號光電式位移感測器 消除了機械接觸,壽命長 可靠性高,缺點 數碼訊號輸出,處理煩瑣。磁致伸縮式位移感測器 磁致伸縮位移 液位 感測器,通過內部非接觸式的測控技術地檢測活動磁環的位置來測量被檢測產品的實際位移值的。位移感測器接線原理圖 鎮江嘉倍 瑞士奇石樂kistler壓力感測器 kist...

有符號數與無符號數運算

有符號數與無符號數之間運算問題,這個問題測試是否懂得c語言中的整數自動轉換原則,有些開發者懂得極少這些東西。當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號型別。因此,從這個意義上講,無符號數的運算優先順序要高於有符號數,這一點對於應當頻繁用到無符號資料型別的嵌入式系統來說是丰常...