16回答

0收藏

喜欢用移位代替乘法的注意啦,每次都是死在这

回答|共 16 个

倒序浏览

11#

mcp2013

发表于 2013-3-14 16:25:28 | 只看该作者

分享到:
zxq6 发表于 2013-3-14 16:12
别听他吹,有些编译器可以,有些编译器不行,对于一些特殊的乘法,绝对的移位比乘法快。 ...

是的   有些编译器可以,有些编译器不行  你写个乘法编译一下  看一下反汇编的代码就知道了
12#

ming1006

发表于 2013-3-14 17:18:25 | 只看该作者

zxq6 发表于 2013-3-14 16:12
别听他吹,有些编译器可以,有些编译器不行,对于一些特殊的乘法,绝对的移位比乘法快。 ...

不知道在keil下编译51程序可以吗?或者说都在那设置的?
13#

nemon

发表于 2013-3-29 14:42:47 | 只看该作者

没明白。char 乘 256 不也是会出问题吗?为什么说是移位的问题捏?
14#

ming1006

发表于 2013-3-29 18:03:36 | 只看该作者

nemon 发表于 2013-3-29 14:42
没明白。char 乘 256 不也是会出问题吗?为什么说是移位的问题捏?

假设
  1. u8 a = 100;
  2. u16 b,c;
  3. b = a * 256;
  4. c = (a << 8);
复制代码
b跟c不一样
15#

nemon

发表于 2013-3-30 11:10:52 | 只看该作者

ming1006 发表于 2013-3-29 18:03
假设b跟c不一样

是啊,“256”就说明右边不会以char进行计算了,肯定不一样
16#

ming1006

发表于 2013-3-30 11:22:05 | 只看该作者

nemon 发表于 2013-3-30 11:10
是啊,“256”就说明右边不会以char进行计算了,肯定不一样

但是用移位的话就是当char计算,会出问题
17#

nemon

发表于 2013-3-30 11:53:41 | 只看该作者

ming1006 发表于 2013-3-30 11:22
但是用移位的话就是当char计算,会出问题

8后边加个L呢?
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条