正文
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:;
unsigned short b:;
unsigned short c:;
};
int main(int argc, char**){
Test t;
t.a=;
t.b=;
t.c=;
short i = *(short*)&t;
cout<<i;
return ;
}
在上述代码中,结构体表示的是两个字节,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