參考書籍:
《c++程序設(shè)計(jì)》、《c++PRimeplus》、《c和指針》、《數(shù)據(jù)結(jié)構(gòu)與算法——c++》
1. 計(jì)算機(jī)地址
1.計(jì)算機(jī)地址是以字節(jié)(byte)為單位的,通常用16進(jìn)制顯示,例如0x0012與0x0013差1個(gè)字節(jié)
注意若非地址而是普通的數(shù)字中位操作是以位(bit)為單位進(jìn)行,一個(gè)字節(jié)包含8個(gè)比特位,
CPU存儲(chǔ)數(shù)據(jù)的兩種格式:
大端(也叫大印第安序)(Big endian):低地址存放儲(chǔ)存數(shù)據(jù)的高位字節(jié)
小端(也叫小印第安序)(Little endian):低地址存放儲(chǔ)存數(shù)據(jù)的低位字節(jié)
比如在CPU內(nèi)存地址上存儲(chǔ)4字節(jié)的整形變量0x12345678,假設(shè)從0x1000開始存儲(chǔ)
存儲(chǔ)數(shù)據(jù)格式 | 0x1000 | 0x1001 | 0x1002 | 0x1003 |
大端 | 0x78 | 0x56 | 0x34 | 0x12 |
小端 | 0x12 | 0x34 | 0x56 | 0x78 |
一般來說,x86系列的CPU是Little endian
代碼驗(yàn)證:
unsigned int num=0;//初始化num為0,防止num為混亂值cout << "存儲(chǔ)num的地址:" << &num << endl;unsigned char *p = (unsigned char*)#//取出num地址中的低字節(jié)地址*p = 0xff;if (num == 0xff){cout << "小端";}else //0xff被解析位高位字節(jié){cout << "大端";}*(p++) = 0xff;//將num的第二個(gè)字節(jié)地址賦值cout <<endl<< num;輸出:在Windows平臺(tái)下驗(yàn)證
存儲(chǔ)num的地址:009AF738
小端
255*/
模型解釋:
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注