[C/C++]大小端模式与位域

struct T{

    unsigned short a:5;

    unsigned short b:5;

    unsigned short c:6; 

}; 

int main(int argc, char**){

    struct T t;

    t.a=16;

    t.b=4;

    t.c=0;

    short i = *(short*)&t;

    cout<<i;

    return 0;

}

上述程序中,在32位小端模式、大端模式下输出何值?

来分析一下,小端模式下,低地址先存放高位域成员,lowAddr->highAddr : c|b|a,

c b a
0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0

 

 

转换为short,00000000100010000=0x0090=144,

大端模式下,低地址先存放低位域成员,lowAddr->highAddr:a|b|c

a b c
1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0

 

 

转换为short,1000000100000000=0x1100,以补码形式表示整型,所以0x1100=-32512

 


本文基于知识共享署名-非商业性使用 3.0 许可协议进行许可。欢迎转载、演绎,但是必须保留本文的署名林羽飞扬,若需咨询,请给我发信

你可能感兴趣的:(c/c++)