我寫了下面的C代碼:ç十六進制常量類型
#include <stdio.h>
int main() {
printf("%d\n", -1 >> 8);
return 0;
}
我編譯此代碼用gcc 4.6.3上使用-m32標誌我x86_64的。如我所料,我得到-1打印出來,這個移位發生在算術上使用2的補碼錶示,得到-1。現在
,如果我不是寫
printf("%d\n", 0xFFFFFFFF >> 8);
我得到16777215我本來期望這個常量被解釋爲一個int(簽字),然後轉變爲算術,這將導致-1一次。我瀏覽了最新的C標準,似乎無法理解爲什麼會出現這種情況。有任何想法嗎?
這是有符號(-1)和無符號(0xFFFFFFFF) – SpacedMonkey
@SpacedMonkey之間的區別我在問爲什麼0xFFFFFFFF是無符號的 – dschatz
@SpacedMonkey Btw,'-'沒有助於這種差異。 '-'仍然是一個一元運算符,並且不會做出簽名。它是帶符號的'1'(因此'-1'也被簽名),而'0xFFFFFFFF'是無符號的。 –