int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
輸出爲:fffffff7
。 我的機器是little-endian。當然我知道*b
等於0xf7
,但我不知道爲什麼printf()
的輸出是這樣的。
int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
輸出爲:fffffff7
。 我的機器是little-endian。當然我知道*b
等於0xf7
,但我不知道爲什麼printf()
的輸出是這樣的。
因爲你的系統是小端,a
存儲在內存中爲F7 FF FF FF
。
b
指向a
的第一個字節。 (F7)
*b
評估爲char
。 (F7)
*b
被提升到一個int
以它作爲參數傳遞,因爲它char
類型它是(通常默認爲signed char
)符號擴展成爲FFFFFFF7
的。
你在期待什麼? – TGO
'%08x'要求十六進制,8個字符寬,帶前導零。當以整數類型打印字符時,在打印之前將其擴展爲int。 –
爲什麼輸出不是000000f7 –