在存儲(chǔ)整數(shù)時(shí),一般按字節(jié)為邏輯單位進(jìn)行存儲(chǔ),有“小端序”和“大端序”之分。小端序(little-endian)
是指將表示整數(shù)的低位字節(jié)存儲(chǔ)在內(nèi)存地址的低位,高位字節(jié)存儲(chǔ)在內(nèi)存地址的高位。如果將整數(shù) 1982062410 存儲(chǔ)至內(nèi)存,由于
1982062 4 10 = ( [ 00000001 ] [ 00101110 ] [ 01110000 ] [ 01010000 ] ) 2 19820624_{10}=([00000001][00101110][01110000][01010000])_2 1982062410?=([00000001][00101110][01110000][01010000])2?
利用 C++中的 union 數(shù)據(jù)結(jié)構(gòu)(或者指針)可以很容易確定計(jì)算機(jī)使用的是何種端序。
union {unsigned int bytes;
unsigned char lowerByte;
} block;
int main(int argc, char *argv[])
{// 第一種方式:利用 union 的特性,將 block 的第一個(gè)成員賦值為 1,然后獲取內(nèi)存
// 低位字節(jié)的值。如果是小端序,低位字節(jié)存儲(chǔ)的值為 1;若為大端序,則值為 0。
block.bytes = 1;
cout<< (block.lowerByte ? "little-endian" : "big-endian")<< endl;
// 第二種方式:利用指針直接獲取低位字節(jié)的值。如果是小端序,低位字節(jié)存儲(chǔ)的值為 1;
// 若為大端序,則值為 0。
unsigned int bytes = 1;
cout<< (*((char *)(&bytes)) ? "little-endian" : "big-endian")<< endl;
return 0;
}
強(qiáng)化練習(xí):UVa594 One Little Two Little Three Little EndiansA。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧