天天看點

C語言移位操作符易錯點

1.邏輯移位和算術移位差異

       邏輯移位是無論左移還是右移,移出都用0來填補。

       算術移位分為兩種情況,針對無符号值,那麼算術移位和邏輯移位是相同的;若有符号值,算術左移等同于邏輯右移,而算術右移,需要根據符号位進行填充,若符号位為1則填充1,反之填充0。

注:在标準中隻針對無符号規定左移或右移都是邏輯移位,但是對于有符号值,未有明确規定,是未定義行為,采用邏輯或者算術完全取決于編譯器,是以需要避免對有符号值進行移位。

2.移位位數為負數

       比如:a>>-2,這種移位性質也是未定義的,由編譯器來決定,是以也要避免使用。

繼續閱讀