sky-Hawk where 发表于 2013-3-14 11:42:08

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

不知道从什么时候喜欢上用移位来代替乘法,移位这样能提高效率嘛!经常移植一个函数后会顺便把用到乘法的地方顺便改为移位,每次做的时候还沾沾自喜!

但是,有多少次你的程序因此无法正常运行呢?我恨自己每次都这么不长记性,今天又花了好久来解决一个莫名其妙的问题,等最后柳暗花明后才发现,我这傻帽的问题不是之前都碰到了好几次了吗?为什么还是会犯这种低级错误呢?
基础不牢?不够细心?
有这个两条就注定你的一生会是坎坷的,诶!

移位的时候千万要记得考虑会不会溢出,丢失高位,不要拿到一个char型数据i也来i<<8,这不是找死吗!
谨以此文为警!!!

nemon 发表于 2013-3-30 11:53:41

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

8后边加个L呢?

ming1006 发表于 2013-3-30 11:22:05

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

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

nemon 发表于 2013-3-30 11:10:52

ming1006 发表于 2013-3-29 18:03 static/image/common/back.gif
假设b跟c不一样

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

ming1006 发表于 2013-3-29 18:03:36

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

假设u8 a = 100;
u16 b,c;
b = a * 256;
c = (a << 8);b跟c不一样

nemon 发表于 2013-3-29 14:42:47

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

sky-Hawk where 发表于 2013-3-14 17:18:25

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

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

sky-Hawk where 发表于 2013-3-14 16:25:28

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

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

sky-Hawk where 发表于 2013-3-14 16:12:26

ming1006 发表于 2013-3-14 16:03 static/image/common/back.gif
这个不太懂,可以给普及下吗

别听他吹,有些编译器可以,有些编译器不行,对于一些特殊的乘法,绝对的移位比乘法快。

sky-Hawk where 发表于 2013-3-14 16:03:45

zxq6 发表于 2013-3-14 14:55 static/image/common/back.gif
有时候移位是方便,而且也是乘法效率没法比的,楼主出了这个问题,只能说明你还没磨练够,如果够了,运行的 ...

是啊,很多时候一不注意就挂了

sky-Hawk where 发表于 2013-3-14 16:03:03

mcp2013 发表于 2013-3-14 14:13 static/image/common/back.gif
做好编译器的优化

用移位来代替乘法


这个不太懂,可以给普及下吗
页: [1] 2
查看完整版本: 喜欢用移位代替乘法的注意啦,每次都是死在这

Baidu
map