C/C++大小端模式与位域
一、大端小端:
1.大端:指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中
例如:0x12345678 在内存中的存储为 :
0x0000 | 0x0001 | 0x0002 | 0x0003 |
12 | 34 | 56 | 78 |
2.小端:指数据的低字节保存在内存的低地址中,而数据的高字节保存在内存的高地址中
例如:0x12345678 在内存中的存储为:
0x0000 | 0x0001 | 0x0002 | 0x0003 |
78 | 56 | 34 | 12 |
二、大小端对位域的影响:
struct Test{ unsigned short a:5; unsigned short b:5; unsigned short c:6; }; int main(int argc, char**){ Test t; t.a=16; t.b=4; t.c=0; short i = *(short*)&t; cout<<i; return 0; }
在上述代码中,结构体表示的是两个字节,a是高位域员,c是低位域员。
1.在大端模式中,低地址存放结构体的高位域员,则存放的位置关系是:abc
a | b | c | |||||||||||||
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
转换为short为0x8100 输出是-32512(以补码的形式编码)
2.在小端模式中,低地址存放结构体的低位域员,则存放的位置关系是:cba
c | b | a | |||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
转换为short为0x0090 输出是144