亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 大小端問題求助 [打印本頁]

作者: skyguide    時間: 2009-10-08 23:32
標(biāo)題: 大小端問題求助
代碼如下:
unsigned char puc[4];
struct tag
{
        unsigned char ucP;
        unsigned char ucD0:1;
        unsigned char ucD1:2;
        unsigned char ucD2:3;
}*pst;

假設(shè)結(jié)構(gòu)體以四字節(jié)對齊方式對齊,可知該結(jié)構(gòu)體tag占用2個字節(jié),其中成員ucD0、ucD1和ucD2一起占用一個字節(jié),那么在大小端情況下,這三個成員在8位序列(一個字節(jié))里的儲存情況是怎么樣的呢,比如小端情況下,成員變量ucD0占用一個字節(jié)中的第一個位呢還是占用這個字節(jié)的第八位呢,請高人指點,謝謝。
作者: ubuntuer    時間: 2009-10-08 23:44
你這個不論是大端還是小端
ucD0都是占用一個字節(jié)中的第一個bit位!!!

大小端是對字節(jié)而言的,不是bit
作者: GodPig    時間: 2009-10-08 23:45
單字節(jié)不受影響吧???

大端小端存儲好像只對字、雙字之類的會產(chǎn)生影響
作者: c/unix    時間: 2009-10-08 23:56
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: langue    時間: 2009-10-09 00:00
標(biāo)題: 回復(fù) #1 skyguide 的帖子
拜托,字節(jié)序和比特序是兩碼事。
作者: skyguide    時間: 2009-10-09 22:44
原帖由 ubuntuer 于 2009-10-8 23:44 發(fā)表
你這個不論是大端還是小端
ucD0都是占用一個字節(jié)中的第一個bit位!!!

大小端是對字節(jié)而言的,不是bit


那下面這個程序輸出什么呢

unsigned char puc[4];
struct tag
{
        unsigned char ucP;
        unsigned char ucD0:1;
        unsigned char ucD1:2;
        unsigned char ucD2:3;
}*pst;



int main()
{
        pst=(struct tag*)puc;
        memset(puc,0,4);
        pst->ucP=1;
        pst->ucD0=2;
        pst->ucD1=3;
        pst->ucD2=4;
        printf("%02x,%02x,%02x,%02x\n",puc[0],puc[1],puc[2],puc[3]);
        return 0;
}

puc[0]很好理解,就是01,puc[2]和puc[3]是00、00。ucD0、ucD1、ucD2占用一個字節(jié),按說,ucD0占用第一位(0),ucD1占用第二三位(11),ucD2占用第四五六位(100),那么puc[1]應(yīng)該是01110000,請問,可是這樣?運行結(jié)果好像是00100110
作者: skyguide    時間: 2009-10-11 20:37
原帖由 skyguide 于 2009-10-9 22:44 發(fā)表


那下面這個程序輸出什么呢

unsigned char puc[4];
struct tag
{
        unsigned char ucP;
        unsigned char ucD0:1;
        unsigned char ucD1:2;
        unsigned char ucD2:3;
}*pst;



int main()
{
        ps ...



高人指點一下pu[1]為什么那樣輸出啊
作者: emperor    時間: 2009-10-11 21:10
原帖由 ubuntuer 于 2009-10-8 23:44 發(fā)表
你這個不論是大端還是小端
ucD0都是占用一個字節(jié)中的第一個bit位!!!

大小端是對字節(jié)而言的,不是bit

正解 Endian基本針對字節(jié).......
作者: emperor    時間: 2009-10-11 21:43
特意看了下wiki活用到這個程度了 。。。
http://en.wikipedia.org/wiki/Bit_numbering
作者: Kallawa    時間: 2009-10-11 21:56
原帖由 skyguide 于 2009-10-9 22:44 發(fā)表


那下面這個程序輸出什么呢

unsigned char puc[4];
struct tag
{
        unsigned char ucP;
        unsigned char ucD0:1;
        unsigned char ucD1:2;
        unsigned char ucD2:3;
}*pst;



int main()
{
        pst=(struct tag*)puc;
        memset(puc,0,4);
        pst->ucP=1;
        pst->ucD0=2; // ucD0就一位, 即只能賦值0或1,你賦值2編譯器應(yīng)該報錯的吧~~
        pst->ucD1=3; // 3 == 11
        pst->ucD2=4; // 4 == 100
        printf("%02x,%02x,%02x,%02x\n",puc[0],puc[1],puc[2],puc[3]);
        return 0;
}


假如

        pst->ucD0=1; // 1
        pst->ucD1=3; //11
        pst->ucD2=4; //100


依次把各位填充,第2個字節(jié):[b7][b6][b5][b4][b3][b2][b1][b0]
ucD0填充b0, ucD1填充b1,b2,ucD2填充b3,b4,b5   --> [0][0] [1][0][0][1][1][1]
那該字節(jié)即 00100111對應(yīng)的%02x就是27




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2