原创 keil c 的乘除与移位问题

2008-8-27 12:47 3179 6 7 分类: MCU/ 嵌入式
看看下面的这个程序

#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电子爱好者家园网站,给咱的宣传积分加点力^_^

文章评论1条评论)

登录后参与讨论

用户377235 2013-7-24 14:12

用户1400793 2008-8-28 13:05

我崇拜的鱼版主给出了下面的代码,更简练^_^ ulong X; uchar L=0x55; uchar M=0xaa; uchar H=0x05; X=H; X<<=16; X|=L|(M<<8);
相关推荐阅读
用户1400793 2016-03-18 10:31
汗!被转烂了的555单电源变双电源电路竟然是错的?
昨天老王在论坛发了个帖子,让大家分析一下下面的电路能否正常工作,附图1电路中,时基电路555接成无稳态电路,3脚输出频率为20KHz、占空比为1:1的方波。3脚为高电平时,C4被充电;低电平时,C3被...
用户1400793 2011-07-26 11:30
国巨和TDK贴片电容规格表
国巨Y5V_10V-to-50V_5.pdfTDK贴片电容规格书.pdf国巨X7R_16V-to-100V_6.pdf...
用户1400793 2011-07-06 15:09
部分DC-DC芯片存档
tps5420-5.5V 至 36V 输入、2A、500kHz 降压转换器.pdfAX3007 输入4.5V-40V SOP8 输出2A.pdfLM2574-国半.pdfLM2575_NCV2575....
用户1400793 2011-07-06 09:25
华为模拟技术讲义上下册
华为模拟技术讲义-下册.pdf华为模拟技术讲义-上册.pdf...
用户1400793 2011-07-06 09:09
IC常用封装尺寸
IC常用封装尺寸.pdf...
用户1400793 2011-07-06 08:50
工字电感规格
工字电感规格.pdf...
EE直播间
更多
我要评论
1
6
关闭 站长推荐上一条 /3 下一条