處理器是Big-endian的,則返回0;是Little-endian的,則返回1

才智咖 人氣:1.77W

int checkCPU()

處理器是Big-endian的,則返回0;是Little-endian的,則返回1

{

{

union w

{

int a;

char b;

} c;

c.a = 1;

return (c.b == 1);

}

}

剖析:

嵌入式系統開發者應該對Little-endian和Big-endian模式非常瞭解。採用Little-endian模式的CPU對運算元的存放方式是從低位元組到高位元組,而Big-endian模式對運算元的存放方式是從高位元組到低位元組。例如,16bit寬的數0×1234在Little- endian模式CPU記憶體中的存放方式(假設從地址0×4000開始存放)為:

記憶體地址 存放內容

0×4000 0×34

0×4001 0×12

而在Big-endian模式CPU記憶體中的存放方式則為:

記憶體地址 存放內容

0×4000 0×12

0×4001 0×34

32bit寬的'數0×12345678在Little-endian模式CPU記憶體中的存放方式(假設從地址0×4000開始存放)為:

記憶體地址 存放內容

0×4000 0×78

0×4001 0×56

0×4002 0×34

0×4003 0×12

而在Big-endian模式CPU記憶體中的存放方式則為:

記憶體地址 存放內容

0×4000 0×12

0×4001 0×34

0×4002 0×56

0×4003 0×78

聯合體union的存放順序是所有成員都從低地址開始存放,面試者的解答利用該特性,輕鬆地獲得了CPU對記憶體採用Little-endian還是Big-endian模式讀寫。如果誰能當場給出這個解答,那簡直就是一個天才的程式設計師。