這是代碼,無符號變量的行爲就像簽署
#include <stdio.h>
int main()
{
unsigned int i = 0xFFFFFFFF;
if (i == -1)
printf("signed variable\n");
else
printf("unsigned variable\n");
return 0;
}
這是輸出,
signed variable
爲什麼i
的價值-1
即使它被聲明爲無符號? 它與隱式類型的對話有關嗎?
這是構建環境,
Ubuntu 14.04, GCC 4.8.2
當不同類型進行比較或參與操作時,請看C語言中的類型提升規則。當你比較'i == -1'時,值'-'1'被轉換爲無符號,然後進行比較。在這種情況下,「-1」變爲「0xFFFFFFFF」,然後匹配「i」。 – lurker
在http://stackoverflow.com/questions/5087992/unsigned-int-and-signed-char-comparison上描述的C99的第6.3.1.8節,通常的算術轉換。 – jarmod
在下面的帖子中有一個很好的答案 http://stackoverflow.com/questions/1863153/why-unsigned-int-0xffffffff-is-equal-to-int-1 – BJU