負數右移學習筆記

       右移位和左移位不同,一共有兩種方案:一種是邏輯移位,左邊移入的位用0填充;另一種是算術移位,左邊移入的位由原先該值的符號位決定,符號位爲1則移入的位均爲1,符號位爲0則移入的位均爲0,這樣能夠保證原數的正負形式不變。如果值10010110右移兩位,邏輯移位的結果是00100101,但算術移位的結果是11100101.算術左移和邏輯左移是相同的,他們只在右移時不同,而且只有當操作數是負值時纔不一樣。標準說明無符號值執行的所有移位操作都是邏輯移位,但對於有符號值到底是採用邏輯移位還是算數移位取決於編譯器。我們可以通過測試程序來測試當前編譯器使用的是什麼方式。一個程序如果使用了負數的右移位操作,那麼這個程序就是不可移植的。

#include <stdio.h>

int main(int argc, char *argv[])
{
	char a = -8;
	printf("0x%hhx\n",a);
	a = a >> 3;
	printf("0x%hhx\n",a);
	return 0;
}

       程序結果如下所示:

       由此可知,本編譯器使用的是算術移位

       備註:

       %hhx用於輸出char

       %hx用於輸出short int.

       %x用於輸出int

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章