+ -
当前位置:首页 → 问答吧 → 请教10倍乘,除法如何转化为位运算,谢谢先。

请教10倍乘,除法如何转化为位运算,谢谢先。

时间:2010-07-28

来源:互联网

本帖最后由 梅川内依酷 于 2010-07-28 11:01 编辑

即一个数乘,除10的倍数。用位运算来表示。

作者: 梅川内依酷   发布时间: 2010-07-28

乘10:(x << 3) + (x << 1)
除10不知道

作者: hellioncu   发布时间: 2010-07-28

看到2楼的:
乘10:(x << 3) + (x << 1)   == x*8 + x*2 ==  x*(8+2)
除10 :  (x >> 3) +   (x >> 1)    == x/8 + x/2 == x/(8+2)  
不过要是考虑余数的话就没这么简单了

作者: mgqw   发布时间: 2010-07-28

回复 hellioncu


    嗯  我记得计算机体系结构那本书上讲过但是忘记了

作者: 梅川内依酷   发布时间: 2010-07-28



QUOTE:
看到2楼的:
乘10:(x  3) +   (x >> 1)    == x/8 + x/2 == x/(8+2)  
不过要是考虑余数的话就没这么简 ...
mgqw 发表于 2010-07-28 11:18




    x/8 + x/2 == x/(8+2)  ,这公式太强悍了

作者: hellioncu   发布时间: 2010-07-28

回复 mgqw


    貌似没有规律可循  如果乘除100或1000,10000。。。就比较麻烦了

作者: 梅川内依酷   发布时间: 2010-07-28



QUOTE:
看到2楼的:
乘10:(x  3) +   (x >> 1)    == x/8 + x/2 == x/(8+2)  
不过要是考虑余数的话就没这么简 ...
mgqw 发表于 2010-07-28 11:18




    1/8 + 1/2 != 1/(8+2)

作者: pandaiam   发布时间: 2010-07-28

囧,那个除10的太假了吧……
拿128试试看:
128/8+128/2=16+64+80…………

作者: daybreakcx   发布时间: 2010-07-28

i <= 65536的情况下
(i * 52429) >>> (16+3) = i / 10

摘至java的jdk的Integer类

作者: zjykzk   发布时间: 2010-07-28



QUOTE:
i >> (16+3) = i / 10

摘至java的jdk的Integer类
zjykzk 发表于 2010-07-28 12:59




   

作者: ecjtubaowp   发布时间: 2010-07-28

回复 zjykzk


   >>>不是到是什么运算。

作者: 梅川内依酷   发布时间: 2010-07-28



QUOTE:
回复  zjykzk


   >>>不是到是什么运算。
梅川内依酷 发表于 2010-07-28 13:41




   

QUOTE:
“>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0。当我们要作位移的原始值并非代表数值时(例如:表示颜色图素的值,最高位并非正负号),可能就会需要使用此种无符号的位移。比如:

-10>>>2=1073741821

-10=1111 1111 1111 1111 1111 1111 1111 0110 (不管原来的“符号”位的值(一长串1),空上的全部直接填0)

0011 1111 1111 1111 1111 1111 1111 1101=1037341821


摘自百度知道

作者: ecjtubaowp   发布时间: 2010-07-28

相关阅读 更多

热门下载

更多