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

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2368 | 回復(fù): 9
打印 上一主題 下一主題

[C] 大小端問題求助 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-10-08 23:32 |只看該作者 |倒序?yàn)g覽
代碼如下:
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é)的第八位呢,請高人指點(diǎn),謝謝。

論壇徽章:
0
2 [報告]
發(fā)表于 2009-10-08 23:44 |只看該作者
你這個不論是大端還是小端
ucD0都是占用一個字節(jié)中的第一個bit位!!!

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

論壇徽章:
0
3 [報告]
發(fā)表于 2009-10-08 23:45 |只看該作者
單字節(jié)不受影響吧???

大端小端存儲好像只對字、雙字之類的會產(chǎn)生影響

論壇徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
4 [報告]
發(fā)表于 2009-10-08 23:56 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
0
5 [報告]
發(fā)表于 2009-10-09 00:00 |只看該作者

回復(fù) #1 skyguide 的帖子

拜托,字節(jié)序和比特序是兩碼事。

論壇徽章:
0
6 [報告]
發(fā)表于 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,請問,可是這樣?運(yùn)行結(jié)果好像是00100110

論壇徽章:
0
7 [報告]
發(fā)表于 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 ...



高人指點(diǎn)一下pu[1]為什么那樣輸出啊

論壇徽章:
0
8 [報告]
發(fā)表于 2009-10-11 21:10 |只看該作者
原帖由 ubuntuer 于 2009-10-8 23:44 發(fā)表
你這個不論是大端還是小端
ucD0都是占用一個字節(jié)中的第一個bit位!!!

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

正解 Endian基本針對字節(jié).......

論壇徽章:
0
9 [報告]
發(fā)表于 2009-10-11 21:43 |只看該作者
特意看了下wiki活用到這個程度了 。。。
http://en.wikipedia.org/wiki/Bit_numbering

論壇徽章:
0
10 [報告]
發(fā)表于 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
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP