//若處理器是big_endian的,則返回0;若是little_endian的,則返回1
//聯合體union的存放順序是所有成員都從低位址開始存放
//乙個聯合變數的長度等於各成員中最長的長度。
//應該說明的是,這裡所謂的共享不是指把多個成員同時裝入乙個聯合變數內,
//而是指該聯合變數可被賦予任一成員值,但每次只能賦一種值,賦入新值則衝去舊值。
int checkcpu( )
c; c.a = 1;
return(c.b ==1);}/*
剖析:嵌入式系統開發者應該對little-endian和big-endian模式非常了解。
採用little-endian模式的cpu對運算元的存放方式是從低位元組到高位元組,
而big-endian模式對運算元的存放方式是從高位元組到低位元組。
記憶體位址 存放內容
0x4000 0x34
0x4001 0x12
而在big-endian模式cpu記憶體中的存放方式則為:
記憶體位址 存放內容
0x4000 0x12
0x4001 0x34
記憶體位址 存放內容
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模式讀寫。
如果誰能當場給出這個解答,那簡直就是乙個天才的程式設計師。
*///一、如何判斷cpu是大端還是小端?
//明白大端和小端的區別,實現起來就非常簡單:
#include int main()u;
printf("short幾個位元組?%d個位元組\n",sizeof(short));
if(sizeof(short) == 2)
else if(u.c[0] == 2 && u.c[1] == 1)
return 0; }}
//聯合體union的存放順序是所有成員都從低位址開始存放
//乙個聯合變數的長度等於各成員中最長的長度。
//應該說明的是,這裡所謂的共享不是指把多個成員同時裝入乙個聯合變數內,
//而是指該聯合變數可被賦予任一成員值,但每次只能賦一種值,賦入新值則衝去舊值。
union fan;
int main1(void)
大端序和小端序
一 概述 位元組序,又稱端序,尾序,英文 endianness。在電腦科學領域中,位元組序是指存放多位元組資料的位元組 byte 的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序 bit 大小端序跟硬體的體系結構有關,所有x86系列的pc機都...
大端序和小端序
在socket程式設計的時候會遇到端序的問題。位元組序和程式語言無關,和硬體的儲存方式有關。intel的cpu使用小端序,而網路上傳輸資料使用大端序。在我的理解中,大端序和小端序並沒有哪種更好,只是儲存的方式不同而已。記憶體中我們只關心1byte,位址的基本單位也是byte。位元組序不關心1個byt...
大端序和小端序
一 概述 位元組序,又稱端序,尾序,英文 endianness。在電腦科學領域中,位元組序是指存放多位元組資料的位元組 byte 的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序 bit 大小端序跟硬體的體系結構有關,所有x86系列的pc機都...