Python运算符:
此图来源于菜鸟教程,更详细参考
http://www.runoob.com/python3/python3-basic-operators.html
说明:
同一优先级的通常从左至右计算(赋值运算符是右至左)
如果想要改变它们的计算顺序,得使用圆括号
**:幂运算,可进行开方运算
~:按位非(取反)
一个简单的公式: – (a + 1)
原理:① 将a = 5,用原码表示:00000101
在计算机中,数值的存储一律用补码,正数的原码就是补码
② 取反操作~,0变1,1变0,为:11111010
取反后,为负数的存储形式,最高位为1,补码(负数要想存储在内存中,要经过取反,加1的操作,最后成为补码)
③ 减1,为:11111001
进行相反操作,减1
④ 取反,为:10000110
符号位不用变
⑤ 输出,为:-6
① 将a = -6,用原码表示:100000110
② 取反,为:11111001,反码
③ 加1,为:11111010,补码
-6内存中的存储形式
④ 取反操作~,为:00000101
取反后,已经是一个正数的存储形式,正数的补码与原码一样,所以无须进行减一和取反。
⑤ 输出,为:5
算术运算符:
*、/、//、%、+、-、
Note:
floor除法,x // y
整除(返回一个不大于x / y的值(向下圆整)),有一个为float,结果为float
求模运算符 x % y,最后结果的符号与y有关,有一个为float,结果为float
<>&#xff1a; 左移&#xff0c;最高位不变&#xff0c;每移一位&#xff0c;结果为&#xff0c;原值 * 2 ** n (n为移动的位数)
右移&#xff0c;最高位不变&#xff0c;每移一位&#xff0c;结果为&#xff0c;原值 / 2 ** n (n为移动的位数)
&&#xff1a;都为1即为1&#xff0c;否则为0
^&#xff1a;相同即为1&#xff0c;否则为0
|&#xff1a;有一个为1即为1&#xff0c;否则为0
比较运算符&#xff1a;
>、>&#61;、
Note&#xff1a;Python2&#xff0c;!&#61;和<>都可以用&#xff1b;
Python3&#xff0c;只用!&#61;
身份运算符&#xff1a;
is&#xff0c;is not
意思&#xff1a;判断两个标识符是否引用的同一个对象&#xff0c;返回True和False
实际上就是判断他们的id&#xff0c;id(a) &#61;&#61; id(b)
成员运算符&#xff1a;
in&#xff0c;not in
意思&#xff1a;判断指定成员是否在序列中&#xff0c;返回True和False
in, x in iterable意思为&#xff1a;如果x在iterable里面&#xff0c;就返回True&#xff0c;否则&#xff0c;返回False
not in, xnot in iterable意思为&#xff1a;如果x不在iterable里面&#xff0c;就返回True&#xff0c;否则&#xff0c;返回False
逻辑运算符&#xff1a;
not&#xff0c;and&#xff0c;or
not&#xff0c;and&#xff0c;or同时出现&#xff0c;先算()&#xff0c;再not&#xff0c;再and&#xff0c;再or
not&#xff0c;真即假&#xff0c;假即真&#xff1b;
and&#xff0c;都为真即真&#xff1b;
or&#xff0c;有一个为真即真
Note&#xff1a;and和or&#xff0c;返回的是真或假的表达式