這是《程序員面試攻略》上的一道題,先前也有一位公司同事問(wèn)過(guò)我,今天有重新拿起看了一下。
書(shū)中介紹了兩種方法
第一種是這樣的利用強(qiáng)制類型轉(zhuǎn)換
bool endianness()
{
int testNum;
char* ptr;
testNum = 1;
ptr = (char*)&testNum;
return ptr;
}
這個(gè)方法還比較好理解。
第二種方法就是利用union。
bool endianness()
{
union{
int theInteger;
char singleChar;
}endianTesg;
endianTest.theInteger = 1;
return endianTest.singleChar;
}
這種方法很巧妙。帶著困意就是沒(méi)有看懂,一個(gè)個(gè)問(wèn)號(hào)就蹦出來(lái)了?這是為什么呢?
說(shuō)實(shí)話,union在學(xué)習(xí)和工作中用的還真的不是很多。其用法還真是不記得。
所以趕快到網(wǎng)上去搜了一下。有篇文章還不錯(cuò),我看懂了。
共用體union用法講解鏈接地址:
http://blog.ednchina.com/likee/20666/message.aspxUnion表示幾個(gè)變量公用一個(gè)內(nèi)存位置, 在不同的時(shí)間保存不同的數(shù)據(jù)類型和不同長(zhǎng)度的變量。其長(zhǎng)度為Union中最大的變量長(zhǎng)度。
這樣,我們就不難理解上面的程序,theInteger和singleChar是共用一個(gè)內(nèi)存位置的,如果是小尾數(shù)法的話,那么singleChar為1,對(duì)應(yīng)theInteger的低八位;如果是大尾數(shù)法的話,那么singleChar為0, 對(duì)應(yīng)theInteger的低八位。
繼續(xù)努力學(xué)習(xí)!
朝著夢(mèng)想加油前進(jìn)。
posted on 2009-07-28 15:04
Sandy 閱讀(792)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
c++學(xué)習(xí)