2011-05-20 63 views
1
#include <stdio.h> 
int main() 
{ 
    long long x = 0x8ce4b16b; 
    long long y = x<<4; 
    printf("%lx, %lx, abc\n", x, y); 
    return 0; 
} 

我越來越
8ce4b16b,0,ABC ......這樣行嗎?C:預計輸出

但是,如果我改變printfprintf("%lld, %lx, abc\n", x, y);

輸出變爲:
2363797867,ce4b16b0,ABC

爲什麼本來這種行爲! :(

回答

6

printf中使用不正確的格式說明調用未定義的行爲。正確的格式說明符long long%lld

另外,還要確保你不要在你的代碼已經簽署整數溢出,因爲這是UB了。

1

您應該在我的腦海中使用printf("%llx, %llx, abc\n", x, y);%lx用於長整數。