[英]C output question.Can anyone explain this output?
#include<stdio.h>
void main()
{
printf("%d",'AA');
}
我期待那里出現錯誤,但程序運行並且 output 是 16705。有人可以解釋一下嗎?
誰能解釋一下?
'AA'
是一個多字符字符常量。 它的類型為int
。 它的值是實現定義的。
這里的“實現”是編譯器,您的編譯器具有將int
值'AA'
映射到的規則。 映射似乎很容易。 因為我不知道你的編譯器,我猜它。 請查閱您的編譯器文檔以確定。
'AA'
映射到值'A' << 8 | 'A'
'A' << 8 | 'A'
。 用另一個'A'
將'A'
位移一個字節。 您的系統很可能使用 ASCII 來表示字符。 ASCII 中的'A'
映射到十進制值65
(十六進制中的0x41
)。 計算0x41 << 8 | 0x41
0x41 << 8 | 0x41
給出十進制值16705
。 因為這是一個int
值,所以您可以使用%d
打印結果。 所以你的代碼相當於printf("%d\n", 16705)
。
'AA'
是一種奇異的野獸。 這是一個字符文字,但 ASCII 沒有單個字符'AA'
。 這解釋了為什么你會得到一個非 ASCII 值。
此代碼運行是因為 char 數據類型是數字,並且您已請求打印 'AA' 的實數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.