一、四则运算(+-*/)
可以对两个整数进行加、减、乘、除操作。下面的例子演示了这4种基本操作的结果。
1 、>>> 1+2 # 加法运算
2 、3 # 结果为3
3、 >>> 1-2 # 减法运算
4 、-1 # 结果为-1
5 、>>> 200-32 # 减法运算
6 、168 # 结果为168
7 、>>> 2*-9 # 乘法运算
8 、-18 # 结果为-18
9 、>>> 12/4 # 除法运算
10 、3 # 结果为3
需要注意的是,在Python 3中,如果除法运算不能除尽,那么返回的是浮点数。如5/2得到的不是2,而是2.5。这与C语言和Java语言不同,甚至与Python 2也不同。
2.幂运算(**)
可以用a**b表示a的b次幂,即ab。例如:
1 、>>> 2**2 # 结果是4
3.得到余数(%)
需要注意的是,如果被除数是整数,那么返回值就是整数;如果被除数是负数,那么返回值就是负数;如果被除数是0,那么抛出ZeroDivisionError异常,表示这是非法操作。例如 :
1 >>> 12 % 3 # 12除以3的余数 # 余数为0
>>> 12 % 5 # 12除以5的余数 # 余数为2
>>> 12%-5 # 被除数为-5, 余数也是小于或等于0、是-3 >>> 5 % 0 # 被除数是0,抛出异常Traceback (most recent call last):File "<stdin>", line 1, in <module>ZeroDivisionError: integer division or modulo by zero
4.相反数(-)
相反数是绝对值相同、符号相反的数。如8的相反数就是-8,-8的相反数就是8,0的相 反数还是0。可以通过“-”来达到取反的目的。
5.++/--的问题
和C语言及Java语言不同,在Python中没有自增“++”和自减“--”操作符。在前面我们介绍过“-”操作符,表示得到相反数。如果是两个“-”则表示取了相反数后再次取相反数,所以--a表示取a的相反数的相反数,得到的结果为a。
6.优先级问题
乘除的优先级高于加减。
相反数操作符“-”的优先级高于加减乘除和幂运算。
二、位运算
1.按位与(&)
按位依次进行与操作。该操作需要两个操作数,返回值的每一位的值是两个操作数的对应位进行与操作的结果。该操作并不改变操作数自身,即进行该操作后,两个操作数的值不会发生改变。与操作表如下图:
表1 表22.按位或(|)
按位依次进行或操作。该操作需要两个操作数,返回值的每一位的值是两个操作数的对应位进行或操作的结果。该操作并不改变操作数自身,即进行该操作后,两个操作数的值不会发生改变。或操作真值表如下:
表33.按位异或(^)
按位依次进行异或操作。该操作也需要两个操作数,返回值的每一位的值是两个操作数的对应位进行异或操作的结果。该操作并不改变操作数自身,即进行该操作后,两个操作数的值并不会发生改变。异或操作如下:
表44.按位取反(~)
按位依次进行取反操作。该操作只需要一个操作数,返回值的每一位的值是操作数的对应位进行取反操作的结果。该操作并不改变操作数自身,即进行该操作后,原操作数的值并不会发生改变。取反操作如下:
表5三、移位运算
移位操作等效于乘以2或者除以2,但是移位运算的效率更高。所以在乘以或者除以2的整数幂时使用移位操作可以提升代码的执行速度。移位操作包括左移和右移两个操作。左移操作相当于得到原操作数除以2的n次方,右移操作相当于得到原操作数乘以2的n次方。这两个操作都不改变原操作数的值。
1.左移操作(>>)
相当于得到原操作数除以2的n次方,原操作数不发生变化。
每左移一位相当于是除以2,即a>>1等效于a/2。如果移动n位,则等效于连除以n个2,即a>>n等效于(((a>>1)>>1)...)>>1。如果操作数是正数,那么对之不停进行左移一位操作,其最终结果一定可以得到0。如果操作数是负数,对之不停进行左移一位操作,是否最后也一定能够得到0呢?来看下面的例子:
-1左移一位还是-1,所以负数不停左移最后会停留在-1而不是0上。
>>> -1>>100 # -1移动100位,依然是-1。
2.右移操作(<<)
相当于得到原操作数乘以2的n次方,原操作数不发生变化。
网友评论