打印
[MSP430]

单片机程序常量用表达式赋值出错的问题请教

[复制链接]
977|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huijiey|  楼主 | 2016-3-4 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用430单片机写一程序,里面对一常量赋值如下:const unsigned char MEID12 = ('5'*2 - 0x24)&0x3F^0x16 + 0x25;

为什么不直接给常量赋值而用表达式赋值?是因为根据不同 版本的板子,表达式中的字符要变化,如上面的'5'可能会变成其它值,调试发现表达式算出的值和预想的不一样?不知是什么原因,比如上面表达式运算结果应该是0x35,而程序编译后是
0x3D。
用的是IAR开发环境,和开发环境有关吗?

相关帖子

沙发
逗比猴| | 2016-3-4 12:06 | 只看该作者
你可以逐个试试看问题出在哪里:D

使用特权

评论回复
板凳
hgjinwei| | 2016-3-4 12:07 | 只看该作者
('5'*2 - 0x24)&0x3F^0x16 + 0x25
= (0x35*2 - 0x24) & 0x3F ^ 0x16 + 0x25
= 0x46 & 0x3F ^ 0x3B
= 0x06 ^ 0x3B
= 0x3D

没错啊,确实是0x3D

你不会是想算:
   (('5'*2 - 0x24)&0x3F^0x16) + 0x25
= ((0x35*2 - 0x24) & 0x3F ^ 0x16) + 0x25
= (0x46 & 0x3F ^ 0x16) + 0x25
= (0x06 ^ 0x16) + 0x25
= 0x10 + 0x25
= 0x35
吧?

使用特权

评论回复
地板
huijiey|  楼主 | 2016-3-4 12:29 | 只看该作者
hgjinwei 发表于 2016-3-4 12:07
('5'*2 - 0x24)&0x3F^0x16 + 0x25
= (0x35*2 - 0x24) & 0x3F ^ 0x16 + 0x25
= 0x46 & 0x3F ^ 0x3B

多谢了!很详细的回答,确实如你想的,是我把运算优先级搞错了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

32

帖子

0

粉丝