此帖出自实时操作系统RTOS论坛
最新回复
第一个问题:C语言后缀。
例如可以这么定义变量:
unsigned long num = 10000UL;
所以这里的L是表示long类型的数据,不给出这个的话有时可能会有问题。写出的话,会明确的告知阅读代码的人是什么类型的数据。增强代码的可阅读性和可靠性。
注意类型后缀大小写无关,所以写小写的“l”也是可以的,只是会让人看错。
第二个问题:大小端模式。
不给你用专业的术语解释了,给个实例一说就会,一试就懂。不是什么很深奥的东西。可能你基本没怎么用到,用到了就很清楚。
定义一个int类型的数据,假如说你的CPU上int类型长度是4字节。
给出实例:
int data = 0x12345678;//写成16进制的数据便于后面的分析,希望你习惯
int *pdata = &data;
假如说
sizeof(data) = 4;
pdata = 0x40000100;
那么也就是说在内存的0x40000100、0x40000101、0x40000102、0x40000103这个4字节内存地址上存放着4字节的数据,也就是data变量。那好,我问你,0x40000100里面存的是什么数据,0x40000101、0x40000102、0x40000103呢?
如果你设计CPU,你也会想到,这个其实有2种方法:
1:0x40000100 = 0x12,0x40000101 = 0x34,0x40000102 = 0x56,0x40000103 = 0x78;
2:0x40000100 = 0x78,0x40000101 = 0x56,0x40000102 = 0x34,0x40000103 = 0x12;
别搞出其他顺序,其他的都是乱的,必须是顺序的方式。
这里第一种,0x12是data的最高位数据,放在了0x40000100 这个最低地址;0x78是data的最低位数据,放在了0x40000103 这个最高地址。这就是大端模式。
反过来就是:0x12是data的最高位数据,放在了0x40000103 这个最高地址;0x78是data的最低位数据,放在了0x40000100 这个最低地址。这就是小端模式。
同理,如果你的CPU上sizeof(short) = 2,那么也存在这种问题。
用专业的术语:
大端模式所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式所谓的小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
注意,大小端模式都是与CPU内部支持的数据类型有关,和复杂结构体、复杂共用体无关。
字节内部不存在大小端模式问题,因为一个字节只有一个地址,大小端模式是地址和数据组织的问题。
有很多种方法来查当前CPU的大小端模式,你感兴趣的话可以动手写写。这个在找工作面试时一般会考到的。
另外,网络数据传输也存在大小端模式的问题,和这里的大小端问题基本一致。
你可以不记住大小端的具体定义,只要你知道怎么得知当前CPU的数据组织,怎么让你写的代码在用到这些特性时不出问题就行。
要记得话,就记住小端模式是一致的对应性。大数据对大地址,小数据对小地址。就是大对大,小对小。一致嘛。大端模式就反着,小端模式就顺着。
详情
回复
发表于 2013-1-22 18:32
点评 | ||
|
||
| |
|
|
此帖出自实时操作系统RTOS论坛
点评 | ||
|
||
| |
|
|
浏览过的版块 |
论坛测评队员
EEWorld Datasheet 技术支持