一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
楼主: hotdll

[STM8/STM32] 为什么STM的代码很多人都这样写?

[复制链接]
发表于 2015-12-10 21:02 来自手机 | 显示全部楼层
上面那个写法应该不牵扯到实际执行,要是原来的第4位本来是低,那5位要变1的话,不是有一瞬间会变高?
回复

使用道具 举报

发表于 2015-12-12 07:26 来自手机 | 显示全部楼层
还可以这样写 PB_DDR |=BIT5,当然,BIT5要之前定义好,这样应该更明了吧,而且,编译器也明白什么意思,不会真的去移位破坏原来的数据。 另外,求lz大神pmQQ号,对lz的新设计有想法
回复

使用道具 举报

发表于 2015-12-13 14:10 | 显示全部楼层
1<<5这个表达式就是常量表达式
一般编译器都能对常量表达式进行优化的,即直接用结果0x20代替它。
回复

使用道具 举报

发表于 2015-12-14 00:46 | 显示全部楼层
楼上的正解,
1<<5就是常量0x20,所以。。。
回复

使用道具 举报

发表于 2015-12-14 09:29 | 显示全部楼层
这个干吗不直接写,多转两弯弯有什么好处?
回复

使用道具 举报

 楼主| 发表于 2015-12-14 09:44 | 显示全部楼层
wangke2010 发表于 2015-12-12 07:26
还可以这样写 PB_DDR |=BIT5,当然,BIT5要之前定义好,这样应该更明了吧,而且,编译器也明白什么意思,不 ...

已经私信你了。
回复

使用道具 举报

发表于 2015-12-15 08:56 | 显示全部楼层
常量是会预编译的,两者编译后完全一样。

而且有时候为了保持可读性,宁可牺牲效率

这也是汇编逐渐被高级语言替代的原因
回复

使用道具 举报

发表于 2015-12-15 09:06 | 显示全部楼层
另外针对8楼的说法,移位占用5个周期是臆测,移位指令是一个周期,移位几次只是指令参数
回复

使用道具 举报

 楼主| 发表于 2015-12-15 20:12 | 显示全部楼层
zhuleipro 发表于 2015-12-15 09:06
另外针对8楼的说法,移位占用5个周期是臆测,移位指令是一个周期,移位几次只是指令参数

呵呵,多谢指教,,对编译器不熟悉。

回复

使用道具 举报

发表于 2015-12-23 06:58 来自手机 | 显示全部楼层
1<<22是0x多少?你说哪个直观?
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-20 18:28 , Processed in 0.042581 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表