解答:
int checkCPU() { { union w { int a; char b; } c; c.a = 1; return (c.b == 1); } } |
內存地址 | 存放內容 |
0x4000 | 0x34 |
0x4001 | 0x12 |
而在Big-endian模式CPU內存中的存放方式則爲:
內存地址 | 存放內容 |
0x4000 | 0x12 |
0x4001 | 0x34 |
32bit寬的數0x12345678在Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)爲:
內存地址 | 存放內容 |
0x4000 | 0x78 |
0x4001 | 0x56 |
0x4002 | 0x34 |
0x4003 | 0x12 |
而在Big-endian模式CPU內存中的存放方式則爲:
內存地址 | 存放內容 |
0x4000 | 0x12 |
0x4001 | 0x34 |
0x4002 | 0x56 |
0x4003 | 0x78 |
聯合體union的存放順序是所有成員都從低地址開始存放,面試者的解答利用該特性,輕鬆地獲得了CPU對內存採用Little-endian還是Big-endian模式讀寫。如果誰能當場給出這個解答,那簡直就是一個天才的程序員。
請寫一個C函數,若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1