Select Language

AI社区

AI技术百科

2.4、Python移位运算(左移和右移)

移位操作等效于乘以 2 或者除以 2,但是移位运算的效率更高,所以在乘以或者除以 2 的整数幂时使用移位操作可以提升代码的执行速度。

移位操作包括左移和右移两个操作:左移操作相当于得到原操作数除以2n,右移操作相当于得到原操作数乘以2n。这两个操作都不改变原操作数的值。

1. 左移操作(>>)

相当于得到原操作数除以2n,原操作数不发生变化。

>>> 2 >> 1   # 得到2左移一位的值    
1            # 相当于是2/2
>>> 2 >> 2   # 得到2左移2位的值
0            # 相当于先左移一位得到1,结果1再除以2等于0

从前面的例子可以看出,每左移一位相当于是除以 2,即 a>>1 等效于 a/2。如果移动 n 位,则等效于连除以 n 个 2,即 a>>n 等效于 (((a>>1)>>1)...)>>1。

如果操作数是正数,那么对之不停进行左移一位操作,其最终结果一定可以得到 0。如果操作数是负数,对之不停进行左移一位操作,是否最后也一定能够得到 0 呢?来看下面的例子:

>>> -8>>1   # 移动一位,相当于是除以2
-4          # 得到-4
>>> -8>>2   # 移动2位,相当于是用结果-4再除以2
-2
>>> -8>>3   # 移动3位,相当于是用结果-2再除以2
-1
>>> -8>>4   # 移动4位,相当于是用结果-1再除以2
-1

我们发现,-1 左移一位还是 -1,所以负数不停左移最后会停留在 -1 而不是 0 上。

>>> -1>>100   # -1移动100位 
-1            # 依然是-1

2. 右移操作(<<)

相当于得到原操作数乘以 2n,原操作数不发生变化。

>>> 3<<1      # 向右移动一位,相当于是乘以2
6             # 得到6
>>> -3 << 1   # 向右移动一位,相当于是乘以2
-6


我要发帖
  • 26

    条内容
Python基本数据类型一共26个章节
本章将介绍 Python 内置的基本数据类型,包括整型、浮点数、字符串、布尔型、列表、元组、集合和字典等 Python 定义的基本数据类型,以及这些数据类型的运算操作。
我们知道,Python 是强类型语言,每个变量在某个时刻的类型是确定的。也就是说,Python 中任意一个存活的对象,其类型是唯一的。不同类型的对象有不同的属性,能完成不同的操作。
另外本章最后还会介绍变量、对象等概念。每个对象都有一个确定的类型,每个变量都指向某个特定的对象。