完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
&符号在C语言中有两种含义:①取地址;②按位与;问题就来了。本人近期有一段程序其中有一条: if(addr&3 != 0)adh_block[addr>>2]<<=2;
if括号中的“addr & 0x3 !=0”我的本来用意是将addr变量先与常数0x3进行按位与运算然后再判断结果是否为非零。 结果写出来之后0x3总是被识别成RAM中的0x3单元,这个问题很难被发现。在查C语言操作符优先级的时候由于没仔细看,把取地址的运算优先级当成了按位与,一直以为按位与&的优先级要大于关系判断符!=。 后来才发现&作为取地址运算符时优先级是比关系判断符要高的,但是如果作为按位与时运算优先级是很低的,居然比关系判断符都低 所以if(addr&3 != 0)adh_block[addr>>2]<<=2;应改为:if((addr&3) !=0)adh_block[addr>>2]<<=2; |
|
相关推荐
3个回答
|
|
好东西,支持了
|
|
|
|
!=0干嘛不直接去掉呢。。。
|
|
|
|
本帖最后由 shipeng 于 2015-6-13 09:23 编辑
这样也可以,更简洁了,但是我有一个程序:if(flag.time.over!=0 && flag.time.ray!=0)display(pass.word0,pass.word1,pass.word2);编译后程序空间会比if(flag.time.over & flag.time.ray)display(pass.word0,pass.word1,pass.word2);少7条指令。编译器为:Microchip MPLAB XC8 C Compiler (Free Mode) V1.34。受这个影响我更尽量在判断语句里面加!=0 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-移植前准备之git管理内核源码
978 浏览 0 评论
【瑞萨RA2L1入门学习】+ MacOS安装e2studio
403 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之分支间的操作
685 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】3D 图形显示
560 浏览 0 评论
676 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12216 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-26 15:52 , Processed in 0.467100 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号