python中提供了多种类型的运算符帮助我们解决实际问题。对于python的运算符,你了解多少呢?
分类:
算术运算符
取a = 1, b = 2
+ #加 # a + b = 3
- #减 # a - b = -1
* #乘 # a * b = 2
/ # 除 # a / b = 0.5
% # 求余数 # a % b = 1
// # 整除 # a // b = 0
** # 幂次方 # a ** b = 1
关系(比较)运算符
== 比较等于:比较两个对象的值是否相等
!= 不等于:比较两个对象的值是否不相等
> 大于:运算符左边的对象值是否大于右边对象的值
< 小于:运算符左边的对象值是否小于右边对象的值
>= 大于或等于:运算符左边的对象值是否大于或等于右边对象的值
<= 小于或等于:运算符左边的对象值是否小于或等于于右边对象的值
逻辑运算符
与(and)
如果参与运算的两个操作数都为True,则结果为True,否则运算结果为False。
或(or)
如果参与or运算的两个操作数有一个为True,则运算结果为True;两个操作数都False时,则返回结果False.
非(not)
not只需要一个操作数,它对原值取反,即操作数为True时,非运算完后为False;原操作数为False时,非运算完后True。
成员运算符
in 判断指定对象是否在序列中找到,是返回True,否返回False
not in 与in相反,判断指定对象是否不在序列中找到,是返回True,否返回False。
身份运算符
is
判断指定对象是否引用自同一对象,即是否具有相同的id地址,是返回True,否返回False。
is not
与is相反,判断指定对象是否引用自不同的对象,即是否具有不同的id地址,是返回True,否返回False。
注意:"=="与 is 的区别:
==判断的是值 指定对象的值是否相等
is 判断的是地址 指定对象id地址是否相等
赋值运算符
= #赋值符,将右侧的值赋值给左侧
+= #例:a += 1 ==> a = a +1 (后面以此类推)
-=
*=
/=
%=
//=
:=
位运算符(二进制)
例如:a = 2 b = 4
& 两者都为真,则为真
a & b = 0
0000 0010 #a
0000 0100 #b
0000 0000 #a & b
| 只要一者为真,则为真
a | b = 6
0000 0010 #a
0000 0100 #b
0000 0110 #a | b
^ 相反为真,否则为假
a ^ b = 6
0000 0010 #a
0000 0100 #b
0000 0110 #a ^ b
~ 所有位都取反
~ a = -3 ~ b = -5
0000 0010 #a
0000 0010 #a的补码
1111 1101 #a取反
1000 0010 #a取反
1000 0011 #a加一 ==> ~a
>> 右移运算符
b >> a 4>>2 0000 0100 ---> 0000 0001 #1
<< 左移运算符
b << a 4<<2 0000 0100 ---> 0001 0000 #16
自加与自减运算符(非python内的,仅作了解)
++
--
前++,和前--,优先级别非常高,仅次于(),先运行
后++,和后--,优先级别非常低,甚至比赋值符号都要低!!!
注意:python为了降低学习难度,因此python中没有自加与自减运算符!
三目运算符:
在C、C++、Java中,三目运算符的表达式是:变量 = 表达式 ?值1 : 值2
而在python中,三目运算符的表达式是:变量 = 值1 if 表达式 else 值2
补充:
原码:将一个其他进制直接转换为二进制的结果
反码:符号位不变,其余各位统统取反
补码:反码+1
(在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)
例题:
3 +(-10)
0000 0011 #3
1000 1010 #-10 (第一位位符号位,1代表负数,0代表正数)
#对-10进行反码补码:
1000 1010 #-10
1111 0101 #-10反码
1111 0110 #-10补码
0000 0011 #3
1111 0110 #-10补码
1111 1001 #相加得到的补码形式
1111 1000 #相加得到的补码形式的反码
1000 0111 #相加得到的补码形式的原码 -7