在计算机系统中,规定:每个地址单元都会对应一个字节(8个bit),但是,在c语言中,除了有一个字节(8个bit)的char,也有两个字节(16个bit)的short,也有四个字节(32个bit)的long(在不同的编译器下可能不同)。对于16位或者32位的处理器,即就是大于8位的处理器,由于寄存器的宽度大于一个字节,那么就存在如何将一个多字节的变量的数据如何存放的问题——所以,就有了大小端之分。
首先,应该明确的是:
数据有高位和低位之分
地址有低地址和高地址之分
大小端的理解:
小端:将数据的低位存放在低地址处,将数据的高位存放在高地址处。
大端:将数据的低位存放在高地址处,将数据的高位存放在低地址处。
所以可以定义一个int变量,将其地址强制为char *型地址,检测该地址中的数据若是int变量的最低字节,则是小端机,反之则为大端机。代码如下:
1 2 3 4 5 6 7 |
|