int i=0x1122,到底0x11这个字节排在前面还是0x22这个字节排在前面?读完下面的部分你将彻底明白。
首先研究这个有什么意义?对于编程如果你清楚变量内部的字节顺序,对于很多数据处理会非常有帮助的,到后面指针的的部分自然就知道了。
字节顺序共有两种:
一种称为大端模式,即高位的字节排在前面低位的字节排在后面,具体到这里就是0x11排在0x22前面,如果整形占4个字节,i的地址&i的值是0x12ff43,那么0x12ff43这个字节存的是0x00
0x12ff44这个字节存的是0x00
0x12ff45这个字节存的是0x11
0x12ff46这个字节存的是0x22
另一种称为小端模式,即低位的字节排在前面高位的字节排在后面,具体到这里就是0x11排在0x22前面,如果整形占4个字节,i的地址&i的值是0x12ff43,那么0x12ff43这个字节存的是0x22
0x12ff44这个字节存的是0x11
0x12ff45这个字节存的是0x00
0x12ff46这个字节存的是0x00
字节顺序由执行这个程序的硬件(CPU的类型)决定,像我们的台式机一般都是小端模式,51单片机里面是大端模式,具体到某个硬件字节顺序是什么样自己可以去测试,测试方法请参看下面验证试验的例子

补充:在VC中通过整形变量i,sizof(i)来得到尺寸,而在Keil中通过类型符号int,sizeof(int)得到尺寸,到底
变量和类型符号的区别是什么?类型符号相当于模具,变量相当于用类型符号这个模具在内存上压出来的实体,
就像压蜂窝煤的模具在煤堆中压出一个蜂窝煤,这里的压煤模具就是类似符号int,煤堆就是内存,变量i就是内存中定义的变量。所以通过一个蜂窝煤和压煤的模具都可以知道一个蜂窝煤在内存中占多大的体积,sizof就是用来测试体积的关键字。
在VC当中(写出来的程序是给X86系列CPU运行的)我们测试出整型占4个字节,整形变量i在内存中的地址为0x12ff44,表现内部字节序为小端模式。
在Keil当中(程序是给51单片机运行的)我们通过调试和反汇编手段得知,整型占2个字节,i的地址是在data类型存储区的0x08,且表现为大端模式。
本文深入探讨了计算机系统中数据类型的字节序问题,包括大端模式与小端模式的概念及其在不同编译环境下的表现。文章还介绍了如何通过简单实验确定特定硬件平台上的字节序,并解释了理解字节序对于编程的重要性。
833

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



