用移位来进行乘除2的运算

2019年11月13日 / 11次阅读 / Last Modified 2019年11月13日
数值计算

已经在多个不同的学习资料中看到过这样的论述,可以使用移位的方式来进行乘除2的运算,计算速度快,而且代码更酷,能写出这样的代码,本身就说明计算机的功底还比较扎实!python支持各种位操作,当让也就可以来通过移位进行乘除2的运算。

左移1位,相当于乘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

右移1位,相当于除2后向下取整

向下取整,就是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条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    右移伴随的向下取整其实很容易理解,除不尽时去掉整个小数部分就是了。 [回复]

  • 麦新杰

    计算机做除法,采用右移后与除数做减法,比乘法要复杂一点,过程与人工计算一样。 [回复]

    • 麦新杰

      除法就是减法,被除数能够被除数减去的次数是商,剩下的是余数。 [回复]

  • 麦新杰

    计算机做乘法,就是采用左移累加的形式! [回复]


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top