大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
记忆方法: 地址的增长顺序与值的增长顺序相反
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
记忆方法: 地址的增长顺序与值的增长顺序相同
例如:
0x12345678 如果大端模式则为:0x12 34 56 78,如果是小端的则为:0x78 56 34 12
由于 机器大小端的不同,n.a = 1; 中这个1存放的位置是不同的
n.a=1实际存储时,是n.a=0x00000001 ;
大端机:高地址存数据的高位 存放结果 00000001
小端机:高地址存数据的低位 存放结果 01000000
所以,根据n.b的值就可以确定机器是大端机,还是小端机!
#include <cstdio>
#include <iostream>
using namespace std;
int aa = 0x12345678;
#define bigorlittle() (0x12 == *(char*)&aa)
int bigorlittle2()
{
union
{
int i;
char c;
}st;
st.i = 0x12345678;
return (0x12 == st.c);
}
int main(int argc, char *argv[])
{
// if(bigorlittle())
// {
// cout<<"big"<<endl;
// }
// else{
// cout<<"little"<<endl;
// }
if(bigorlittle2())
{
cout<<"big"<<endl;
}else
{
cout<<"little"<<endl;
}
short int x;
char x0,x1;
x=0x1122;
x0=((char*)&x)[0]; //低地址单元
x1=((char*)&x)[1]; //高地址单元
if(*(char*)&x1 == 0x11)
{
cout<<"little"<<endl;
}
return 0;
}