嵌入式操作系统(比如Nucleus、Vxworks、OSE等)中的移位运算和乘2的N次方是不是一样的?

jack_wq 2009-12-11 08:50:58
最近想通过定点运算实现一个算法,为了尽量提高效率,打算采用移位运算,想问一下,在嵌入式操作系统(比如Nucleus、Vxworks、OSE等)中的移位运算和乘2的N次方是不是一样的操作?这个和操作系统有关还是编译器的问题?是不是有的编译器会进行优化后,编译的结果就相同了?
哪位大侠能给详细的解释一下,谢谢!
...全文
287 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
deng1243 2009-12-11
  • 打赏
  • 举报
回复
一样的
极深研几 2009-12-11
  • 打赏
  • 举报
回复
关于基本运算的优化,这个需要编译提供这样的支持。
极深研几 2009-12-11
  • 打赏
  • 举报
回复
C/C++的语法规定位运算的规则,而编译器的厂商必须实现这个规则。规则本身与平台没有关系,所以你大可放心。
z569362161 2009-12-11
  • 打赏
  • 举报
回复
应该是和编译器相关
highball 2009-12-11
  • 打赏
  • 举报
回复
和符号有关系吗?
  • 打赏
  • 举报
回复
移位的操作,绝对够快,如果可以,尽量用移位而不是用乘方,谁知道编译器有没有优化呢。
jernymy 2009-12-11
  • 打赏
  • 举报
回复
关注
james_hw 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 jack_wq 的回复:]
最近想通过定点运算实现一个算法,为了尽量提高效率,打算采用移位运算,想问一下,在嵌入式操作系统(比如Nucleus、Vxworks、OSE等)中的移位运算和乘2的N次方是不是一样的操作?这个和操作系统有关还是编译器的问题?是不是有的编译器会进行优化后,编译的结果就相同了?
哪位大侠能给详细的解释一下,谢谢!

[/Quote]

理论上移位运算和乘2的N次方是一样的结果,但是否一样的操作则不一定,由编译器决定。如果有把握的话,还是移位好,移位的效果是一样的,乘法编译出来的结果有可能不同,最快也就是移位的效果。
Arnold9009 2009-12-11
  • 打赏
  • 举报
回复
跟操作系统无关
与编译器有关,一般来说,编译器优化后的结果是一样的

不过有的CPU带有硬件乘法器,这种情况下编译器编译出来的结果可能不一样,移位的速度肯定比乘法快
jack_wq 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 linwendong1982 的回复:]
右移n位相当于除以2的n次方,左移n位相当于乘以2的n次方,谭浩强书里写着。
[/Quote]
这个结果我是知道的,我是想关注一下对于编译器来说,实际运行的方式是不是也是一样的(比如乘512和移位运算都按照移位操作)?
我怀疑有的编译器不会做优化,也就是说可能有的编译器会分别按照乘法和移位运算,有的编译器统一按照移位运算以提高效率。
不知道标准C在这方面是否有规定,编译器具体是如何处理的呢?
gjt19910817 2009-12-11
  • 打赏
  • 举报
回复
应该是这样的吧。
guzhijie1981 2009-12-11
  • 打赏
  • 举报
回复
个人感觉和 编译器有关,另外我想一般的CPU是支持移位运算的;和OS没有多少关系 吧;
建鼎呓语 2009-12-11
  • 打赏
  • 举报
回复
理论上是一样,不过得到相应芯片上去检验,正数、负数移位后的情况。不过标准C语言是带符号移位,左移最低位补0,右移最高位补原先的最高位。
linwendong1982 2009-12-11
  • 打赏
  • 举报
回复
右移n位相当于除以2的n次方,左移n位相当于乘以2的n次方,谭浩强书里写着。
Steven_0610 2009-12-11
  • 打赏
  • 举报
回复
关注

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧