C51程序编写的时候要注意unsigned long的问题

Posted qingfeng2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C51程序编写的时候要注意unsigned long的问题相关的知识,希望对你有一定的参考价值。

最近在编写一个C51程序的时候,有一个四字节的数据,需要从一个数组中提取出来。结果发现一直出错。只取出来了后面两个字节数据,而前面的两字节则丢失。具体的上代码。

注意代码是在KEIL2 的C51中编译,别的环境可能不一定会出这问题。

uint8_t In[4] = {0x12, 0x34, 0x56, 0x78};

uint32_t Temp;

Temp |= In[0] << 24;

Temp |= In[1] << 16;

Temp |= In[2] << 8;

Temp |= In[3];

输出结果Temp = 0x5678。

试了好久都不行,后面以为类型定义有错误。结果又是对的。

在网上找了好半天,有的说要加L有的说要用(unsigned long)强制类型转换。经过测试不行。

后面就尝试用一个中间变量进行转换,就可以了。代码如下。

 

uint8_t In[4] = {0x12, 0x34, 0x56, 0x78};

uint32_t Temp;

uint32_t T1 = 0;

 

T1 = In[0];

T1 <<= 24;

Temp |= T1;

T1 = 0;

 

T1 = In[1];

T1 <<= 16;

Temp |= T1;

T1 = 0;

 

T1 = In[2];

T1 <<= 8;

Temp |= T1;

T1 = 0;

 

Temp |= In[3];

输出就为0x12345678了。

这样操作就可以正常的取出数据了。这个和编译的环境有关。如果在编写C51的时候,发现uint32_t丢失前两字节,可以查一查是不是这个问题。

以上是关于C51程序编写的时候要注意unsigned long的问题的主要内容,如果未能解决你的问题,请参考以下文章

C51单片机浮点数运算

单片机C51的中断程序应该怎么写

用Keil C51编写单片机程序,怎么看程序多少行

KEIL C51程序中如何嵌入汇编

keil C51中的data怎么设置成大一点的值?

求。用89C51单片机设计4*4矩阵式键盘计算器程序