运算符是用于表示某种运算操作的符号,指明对操作数进行的运算。运算符按其功能可以划分为:算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、成员运算符、身份运算符等。这里仅介绍逻辑运算符:and、or和not,其余运算符将在后续程序中使用时再予以介绍。逻辑运算符的操作数是逻辑值True(真)和False(假)。not属于一元运算符,只需要一个操作数;or和not属于二元运算符,需要两个操作数。
操作数X | 操作数Y | X and Y | X or Y | not X |
True | True | True | True | False |
True | False | False | True | False |
False | True | False | True | True |
False | False | False | False | True |
表达式是由变量、对象、方法调用和操作符等元素组成的式子,它执行操作符指定的计算并返回计算结果。例如:a+b,a>b,a and b都是表达式。表达式的计算结果或者赋值于变量,或者用于程序控制的条件。单独的变量或方法调用等也可视为一个表达式。

表达式中出现多个运算符时,Python将按运算符的优先级从高到低进行计算。例如四则混合运算中,乘(*)除(/)的运算优先级高于加(+)减(-),即在没有使用括号改变运算次序时,乘(*)除(/)优先于加(+)和减(-)。
运算符 | 描述 |
** | 指数(最高优先级) |
~,+,- | 按位翻转,正号,负号 |
*,/,%,// | 乘、除、取模和取整除 |
+,- | 加法、减法 |
>>,<< | 右移、左移运算符 |
& | 位与 |
^,| | 位运算符 |
<,<=,>,>=,!=,== | 比较运算符 |
is,is not | 身份运算符 |
in,in not | 成员运算符 |
not,or,and | 逻辑运算符 |

赋值 链式赋值
b = a = a + 1相当于
如下2条语句:
>>> a = a + 1
>>> b = a
位运算: 只适用于整数,位运算就是按整数的二进制位进行的运算
取反 ~,与 & , 或 |,异或 ^,左移 <<,右移 >>
例:
print( 1<< 1) #2
print( 1>> 1) #0

Python运算符优先级: 算术运算符 > 位运算符 > 关系运算符 > 逻辑运算符
算术运算符的优先级: ** > + -(正负号)> * / > // > % > + -
逻辑运算符的优先级:not > and > or
逻辑操作符 and 和 or 也称作短路操作符,具有惰性求值的特点:表达式从左向右解析,一旦结果可以确定就停止。
当计算表达式 exp1 and exp2 时,先计算exp1的值,当exp1的值为True或非空值,才计算并输出exp2的值;当exp1的值为 False 或空值直接输出exp1的值,不再计算exp2。
当计算表达式 exp1 or exp2 时,先计算exp1的值,当exp1的值为True或非空值,直接输出exp1的值,不再计算exp2;当exp1的值为False或空值,才计算并输出exp2的值。
例:
print(3 < 2 and 2 < 1 or 5 > 4) #True
x, y, z = 1, 2, 3
print( x + 3/y -z % 2 > 2) #False
print( 3 - 2 << 1) #2 相当于 print( (3 - 2)<< 1)
print( (3 - 2)<< 1) #2
print(3 - 2 << 1 < 3) #True
print( 1<< 1) #2
print( 1>> 1) #0
计算方法
左移表达式的位 result = expression1 << expression2
参数 result 任何变量。expression1 任何表达式。expression2 任何表达式。
说明:<<运算符把expression1的所有位向左移expression2指定的位数。例如:
var temp temp = 14 << 2 变量temp的值为 56,因为 14 (即二进制的 00001110)向左移两位等于 56 (即二进制的 00111000)。
简单介绍一种方便计算的方法:
8 << 1的值为8*2=16;
8 << 2的值为8*(2^2)=32;
8 << n的值为8*(2^n)。
右移运算符,移位运算符的一种程序设计中位操作运算符的一种。移位运算符有双目移位运算符:<<(左移)和>>(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。(均由机器来定:这个不正确)(MSDN原文明确说明,右移对于无符号类型强制补0,对于有符号类型续补符号位)
例:
print( 3<< 1) #6 十进制3(即二进制 11) 左移1位变成后补0 110
print( 3<< 2) #12 十进制3(即二进制 11) 左移2位变成后补00 1100
print( 3>> 1) #1 十进制3(即二进制 11) 右移1位。01
#右移运算是将一个二进制位的操作数按指定移动的位数向右移动,
#移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。
print( 4>> 2) #1 十进制3(即二进制 100) 右移2位,成001

