看看下面的这个
程序:
#include "at89x51.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//#define bus P0 //lcd1602 êy?Y×ü??
void main()
{
while(1)
{
uchar L="0x55";
uchar M="0xaa";
uchar H="0x05";
ulong X;
X=H*65536+M*256+L;
// X=(H<<16)|(M<<8)|L;
}
}
本着确认的态度测试了一下keil 的移位代替乘除的效果,其中L,M,H后的数字只是我用来验证结果正误的,理论上说最后两句无论采用那句最终的X值都应该是0005aa55,但实际运行下来结果是不一样的,采用移位的方法的结果是0000aa55,
在华仔兄弟的提醒下,因为我这里的L,M,H都是uchar型,M*256已经溢出,更不用说H*65536了,正确的方法是把M定义位uint型,H定义为ulong型即可
仍以上面的为例进行编译,按照移位计算X值,最终code=118,而直接乘的话code=175,还是挺可观的!
实践是检验“理论”的唯一标准^_^
举手之劳,希望热心的兄弟姐妹帮忙点击宣传一下
CEPark电子爱好者家园网站,给咱的宣传积分加点力^_^
用户377235 2013-7-24 14:12
用户1400793 2008-8-28 13:05