下面的两个程序均可判断CPU的大小端问题
int i=1;
|
内存地址
|
0x4000
|
0x4001
|
|
存放内容
|
0x34
|
0x12
|
|
内存地址
|
0x4000
|
0x4001
|
|
存放内容
|
0x12
|
0x34
|
|
内存地址
|
0x4000
|
0x4001
|
0x4002
|
0x4003
|
|
存放内容
|
0x78
|
0x56
|
0x34
|
0x12
|
|
内存地址
|
0x4000
|
0x4001
|
0x4002
|
0x4003
|
|
存放内容
|
0x12
|
0x34
|
0x56
|
0x78
|
short int x;
char x0,x1;
x=0x1122;
x0=((char*)&x)[0]; //低地址单元
x1=((char*)&x)[1]; //高地址单元
若x0=0x11,则是大端; 若x0=0x22,则是小端......
上面的程序还可以看出,数据寻址时,用的是低位字节的地址。
补充三个方法
方法1:
高字节存储在高地址是小端,高字节存储在低地址是大端。
int main()
{
}
方法二:
联合体union的存放顺序是所有成员都从低地址开始存放
int main()
{
}
方法三
int
{
unsigned
p
num
*(BYTE
if(num
{
printf("The
}
else
{
printf("The
}
return
}
不同位数操作系统下类型简介
| 类型 | 32位操作系统(字节) | 64位操作系统(字节) |
| char | 1 | 1 |
| short | 2 | 2 |
| int | 4 | 4 |
| long | 4 | 8 |
| long long | 8 | 8 |
| float | 4 | 4 |
| double | 8 | 8 |
| long double | 8 | 8 |
| wchar_t | 2 | 2 |
| bool | 2 | 1 |
| 各种类型指针 | 4 | 8 |
总结:指针和long是需要注意的地方,long类型的位数总是和机器的指针位数相等。
从32位系统过渡到64位系统不同于从16位系统过渡到32位系统,因为DOS系统下int只有2个字节,而Windows系统下int是4个字节,过渡到64位系统后int的字节数没有增加。如果使用 Windows系统编程,支持64位需要Visual Studio 2005/2008均可,而早期版本是不支持64位平台的。
本文介绍了几种检测CPU大小端模式的方法,包括通过联合体union特性、指针转换和特定类型赋值来判断处理器的字节序。这些方法适用于不同的编程场景。
1162

被折叠的 条评论
为什么被折叠?



