2019年11月13日 / 140次阅读 / Last Modified 2020年11月23日
算法
已经在多个不同的学习资料中看到过这样的论述,可以使用移位的方式来进行乘除2的运算,计算速度快,而且代码更酷,能写出这样的代码,本身就说明计算机的功底还比较扎实!python支持各种位操作,当让也就可以来通过移位进行乘除2的运算。
>>> 12 << 1
24
>>> 12 << 2
48
>>> 12 << 3
96
>>> 12 << 4
192
>>>
>>> -12 << 1
-24
>>> -12 << 2
-48
>>> -12 << 3
-96
>>> -12 << 4
-192
左移N位,就相当于乘上2的N次方!
>>> 1234 << 123
13122138774388689497306383299087561654272
>>> 1234 * 2**123
13122138774388689497306383299087561654272
向下取整,就是ROUND FLOOR,对应python的 // 操作。 请参考:python中各种ROUND方法
>>> 1234 >> 1
617
>>> 1234 >> 2
308
>>> 1234 >> 3
154
>>> 1234 >> 4
77
>>>
>>> -1234 >> 1
-617
>>> -1234 >> 2
-309
>>> -1234 >> 3
-155
>>> -1234 >> 4
-78
因为python中的int整数不会溢出,因此左移之后的数就越来越大。而右移的数是越来越小,正数最后就变成0,负数最后就变成-1。
>>> 1234 >> 100
0
>>> -1234 >> 100
-1
用位移来进行乘除2的操作,代码写得也很少。
-- EOF --
本文链接:https://www.pynote.net/archives/1495
《用移位来进行乘除2的运算》有4条留言
前一篇:在python中获取时间
后一篇:给tk.Entry增加输入自动检查功能
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记
右移伴随的向下取整其实很容易理解,除不尽时去掉整个小数部分就是了。 [ ]
计算机做除法,采用右移后与除数做减法,比乘法要复杂一点,过程与人工计算一样。 [ ]
除法就是减法,被除数能够被除数减去的次数是商,剩下的是余数。 [ ]
计算机做乘法,就是采用左移累加的形式! [ ]