关于类型转换问题请教

[复制链接]
2316|3
 楼主| pufan 发表于 2008-4-16 14:31 | 显示全部楼层 |阅读模式
#include<reg51.h>

void main()
{
    unsigned char temp[4]={0xaa,0xbb,0xcc,0xdd};
    unsigned long int temp1;
    temp1 = (temp[0]<<24)|(temp[1]<<16)|(temp[2]<<8)|temp[3];
    
}

如程序,我的需求是要求temp1=0xaabbccdd,但是答到的却是0x0000ccdd,为什么?
请高手指点
westsfw 发表于 2008-4-16 16:14 | 显示全部楼层

强制类型转换就OK了.

强制类型转换就OK了.
mohanwei 发表于 2008-4-16 16:23 | 显示全部楼层

溢出了。uchar再移位时,要先强制转换为ulong

computer00 发表于 2008-4-16 16:25 | 显示全部楼层

一条条来,别弄这么长的语句

temp1=temp[0];
temp1<<=8;
temp1+=temp[1];
temp1<<=8;
temp1+=temp[2];
temp1<<=8;
temp1+=temp[3];
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部