标签:
keil c 移位 乘除
看看下面的这个程序:
#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电子爱好者家园网站,给咱的宣传积分加点力^_^
系统分类:
单片机 | 用户分类:
零星代码备忘 | 来源:
原创 | 【推荐给朋友】 | 【添加到收藏夹】