C语言深入探讨实战篇之大小端模式(二)

本文深入探讨了计算机系统中数据类型的字节序问题,包括大端模式与小端模式的概念及其在不同编译环境下的表现。文章还介绍了如何通过简单实验确定特定硬件平台上的字节序,并解释了理解字节序对于编程的重要性。
对于基本类型float\double\int等这些个长度不是1个字节的数据类型(补:不同编译环境可能编译出来的的不同,如在VC当中int占4个字节,在TC、Keil、IAR等一些编译环境下int占2个字节,具体到某个环境下占几个字节可以定义一个相应的变量,通过sizeof这个关键字去测试,看值是多少就是几个字节,然字节数不同仅仅表示的范围宽、窄的区别而已,其余没有任何区别,2个字节的int只能表示-32768到32767之间的数,4个字节就表示的范围负2的32次方到正2的32次方减去1这个范围),如果他们定义的变量里边多个字节是怎么个顺序?如

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单片机里面是大端模式,具体到某个硬件字节顺序是什么样自己可以去测试,测试方法请参看下面验证试验的例子

C语言深入探讨实战篇之大小端模式(二)


补充:在VC中通过整形变量i,sizof(i)来得到尺寸,而在Keil中通过类型符号int,sizeof(int)得到尺寸,到底

变量和类型符号的区别是什么?类型符号相当于模具,变量相当于用类型符号这个模具在内存上压出来的实体,

就像压蜂窝煤的模具在煤堆中压出一个蜂窝煤,这里的压煤模具就是类似符号int,煤堆就是内存,变量i就是内存中定义的变量。所以通过一个蜂窝煤和压煤的模具都可以知道一个蜂窝煤在内存中占多大的体积,sizof就是用来测试体积的关键字。

在VC当中(写出来的程序是给X86系列CPU运行的)我们测试出整型占4个字节,整形变量i在内存中的地址为0x12ff44,表现内部字节序为小端模式。

在Keil当中(程序是给51单片机运行的)我们通过调试和反汇编手段得知,整型占2个字节,i的地址是在data类型存储区的0x08,且表现为大端模式。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值