下面的两个程序均可判断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位平台的。