Python中的运算符
运算符
运算符是一些特殊的符号,主要用于数学计算、比较大小和逻辑运算等;使用运算符将不同类型的数据按照一定的规则链接起来的式子称为表达式。运算符分类如下:
1)算数运算符:即四则运算及其相关运算
运算符 | 说明 | 示例 | 结果 |
+ | 加 | 2+5 | 7 |
- | 减 | 5-3 | 2 |
* | 乘 | 5*2.4 | 12.0 |
/ | 除 | 9/4 | 2.25 |
% | 取余数,即返回除法的余数 | 9%4 | 1 |
// | 取整除,即返回商的整数部分 | 9%4 | 2 |
** | 幂,返回x的y词放 | 2**5 | 32(2的4次方) |
- 注意点1:在求余时(%)如果除数是负数,则取得的结果也是负数
- 注意点2:在使用除法( /或者// )运算符和求余运算符(%)时,除数不能为零
print(' + :'+ str(7 + 2)) #加 print(' - :'+ str(5 - 3)) #减 print(' * :'+ str(5 * 2.4)) #乘 print(' / :'+ str(9 / 4)) #除 print(' % :'+ str(9 % 4)) #取余 print(' // :'+ str(9 // 4)) #整除 print(' ** :'+ str(2 ** 5)) #幂
2)赋值运算符:主要是为变量赋值;右边的值赋给左边的变量, 也可以进行某些运算过后在赋给左边的变量。
运算符 | 说明 | 示例 | 展开式 |
= | 简单的赋值运算 | a = b | a = b |
+= | 加 赋值 | a += b | a =a + b |
-= | 减 赋值 | a -= b | a =a - b |
*= | 乘 赋值 | a *= b | a =a * b |
/= | 除 赋值 | a /= b | a =a / b |
%= | 取余数 赋值 | a %= b | a =a % b |
**= | 幂 赋值 | a **= b | a =a ** b |
//= | 取整除 赋值 | a //= b | a =a // b |
num = 2
print('num = ' + str(num)) #简单的赋值运算
num += 1
print('num += 1 ; num = ' + str(num)) #加 赋值
num -=1
print('num -= 1 ; num = ' + str(num)) #减 赋值
num *= 2
print('num *= 2 ; num = ' + str(num)) #乘 赋值
num /= 2
print('num /= 2 ; num = ' + str(num)) #除 赋值
num %= 3
print('num %= 3 ; num = ' + str(num)) #取余 赋值
num **= 3
print('num **= 3 ; num = ' + str(num)) #幂 赋值
num //= 3
print('num //= 3 ; num = ' + str(num)) #整除 赋值
3)比较(关系)运算符:比较运算符,又被称之为关系运算符,用于对变量或者表达式的结果进行大小、真假的比较。若比较结果为真,则返回True,反之返回False。比较一般以条件语句内容作为判断依据。
运算符 | 说明 | 示例 | 结果 |
> | 大于 | 'a'>'b' | False |
< | 小于 | 156<828 | True |
== | 等于 | 'c'='c' | True |
!= | 不等于 | 'y'!='t' | True |
>= | 大于等于 | 479>=426 | True |
<= | 小于等于 | 85.95<=64.28 | False |
print('a'>'b')
print(156<828)
print('c'=='c')
print('y'!='t')
print(479>=426)
print(85.95<=64.28)
4) 逻辑运算符:
假定某购物平台:在每星期的周三凌晨24点到1点、周六下午两点到三点,对零食类进行显示折扣秒杀活动,那么想要参与秒杀活动的顾客,就需要满足过冬规定的时间条件:周三且在时间段0:00AM~1:00AM内或者周六且在时间段14:00PM~15:00PM内;这里用到的就是所谓逻辑关系。而在Python中也提供了这样的逻辑运算符进行相关逻辑运算。
逻辑运算符对真假两种布尔值进行运算,运算后的结果仍是一个布尔值:其中主要的逻辑运算符包括and(逻辑与)、or(逻辑或)、not(逻辑非)。
运算符 | 说明 | 用法 | 结合方向 |
and | 逻辑与 | Op1 and Op2 | 左-->右 |
or | 逻辑或 | Op1 or Op2 | 左-->右 |
not | 逻辑非 | not Op | 右-->左 |
使用逻辑云端福进行逻辑运算符 进行逻辑运算的结果
表达式1 | 表达式2 | 表达式1 and 表达式2 | 表达式1 or 表达式2 | not 表达式 |
True | True | True | True | False |
True | False | False | True | False |
False | False | False | False | True |
False | True | False | True | True |
5)位运算符:位运算符用于对二进制数进行计算,因此,在执行位运算前,要想将需执行位运算的数据转换为二进制数
- '位与'运算
- 符号:&
- 运算法则:两个操作数的二进制表示,只有对应位都是1,结果为1,否则为0.
操作数1 | 操作数2 | 位与运算( & ) | ||
第 一 组 | 十进制 | 4 | 8 | 0 |
二进制 | 0000 0000 0000 0100 | 0000 0000 0000 1000 | 0000 0000 0000 0000 | |
第 二 组 | 十进制 | 8 | 12 | 8 |
二进制 | 0000 0000 0000 1000 | 0000 000 0000 1100 | 0000 0000 0000 1000 |
#位与运算
print("位与运算")
print(4&8)
print(8&12)
- '位或'运算
- 符号:|
- 运算法则:两个操作数的二进制表示,只有对应位都是0,结果为0,否则为1.
操作数1 | 操作数2 | 位或运算( | ) | ||
第 一 组 | 十进制 | 4 | 8 | 12 |
二进制 | 0000 0000 0000 0100 | 0000 0000 0000 1000 | 0000 0000 0000 1100 | |
第 二 组 | 十进制 | 8 | 12 | 12 |
二进制 | 0000 0000 0000 1000 | 0000 000 0000 1100 | 0000 0000 0000 1100 |
#位或运算
print("位或运算")
print(4|8)
print(8|12)
- '位异或'运算
- 符号:^
- 运算法则:两个操作数的二进制表示,只有对应位相同(同为1或同为0),结果为0,否则为1.
操作数1 | 操作数2 | 位异或运算( ^ ) | ||
第 一 组 | 十进制 | 4 | 8 | 12 |
二进制 | 0000 0000 0000 0100 | 0000 0000 0000 1000 | 0000 0000 0000 1100 | |
第 二 组 | 十进制 | 8 | 12 | 4 |
二进制 | 0000 0000 0000 1000 | 0000 000 0000 1100 | 0000 0000 0000 0100 | |
第 二 组 | 十进制 | 31 | 22 | 9 |
二进制 | 0000 0000 0001 1111 | 0000 000 0001 0110 | 0000 0000 0000 1001 |
#位异或运算
print("位异或运算")
print(4^8)
print(8^12)
print(31^22)
- '位取反'运算
- 符号:~
- 运算法则:在操作数的二进制表示中,将0修改为1,1修改为0.
操作数(十进制) | 操作数(二进制) | 操作数取反(二进制) | 操作数取反(十进制) |
4 | 0000 0000 0000 0100 | 1111 1111 1111 1011 | -5 |
8 | 0000 0000 0000 1000 | 1111 1111 1111 0111 | -9 |
12 | 0000 0000 0000 1100 | 1111 1111 1111 0011 | -12 |
#位取反运算
print("位取反运算")
print(~4)
print(~8)
print(~12)
- 左移运算符
- 符号:<<
- 运算法则:讲一个二进制操作数,向左移动指定的位数
- 左边(高位端)溢出的位被丢弃
- 右边(低位端)空出的位用0 补充
- 左移位运算相当于乘以2的n次幂
操作数 | |||
十进制 | 48 | 31 | |
二进制 | 00110000 | 00011111 | |
左移(<<) 1位 | 二进制 | 01100000 | 00111110 |
十进制 | 96 | 62 | |
左移(<<) 2位 | 二进制 | 11000000 | 01111100 |
十进制 | 192 | 124 |
#左移运算符
print('左移运算符')
print('48左移1位:' + str(48<<1))
print('48左移2位:' + str(48<<2))
print('31左移1位:' + str(31<<1))
print('31左移2位:' + str(31<<2))
- 右移运算符
- 符号:>>
- 运算法则:讲一个二进制操作数,向左移动指定的位数
- 右边(低位端)溢出的位被丢弃
- 左边(高位端)空出的位,需要填充,填充时:
- 如果最高位是0(正数),左侧空位填入 0
- 如果最高位是1(负数),左侧空位填入 1
- 右移位运算相当于除以2的n次幂
操作数 | ||||
十进制 | 48 | 60 | -80 | |
二进制 | 00110000 | 00111100 | 10100000 | |
右移(>>) 1位 | 二进制 | 00011000 | 00011110 | 11010000 |
十进制 | 24 | 30 | -40 | |
右移(>>) 2位 | 二进制 | 00001100 | 00000111 | 11101000 |
十进制 | 12 | 124 | -20 |
#右移运算符
print('右移运算符')
print('48右移1位:' + str(48>>1))
print('48右移2位:' + str(48>>2))
print('60右移1位:' + str(60>>1))
print('60右移2位:' + str(60>>2))
print('-80右移1位:' + str(-80>>1))
print('-80右移2位:' + str(-80>>2))
PS:由于位移运算速度很快,所以,在程序中遇到表达式乘以或者除以2的n次幂时,一般采用位移运算代替。
6)运算符优先级问题
Python运算符的运算规则:优先级搞得运算先执行,优先级低的运算后执行,同一优先级的操作按照从左到右顺序执行。若哟小括号,则括号内运算优先执行。
运算优先级从到低排序如下表所示:
类型 | 说明 |
** | 幂 |
~、+、- | 取反、正号、负号 |
*、/、%、// | 算数运算符:乘、除、取余、整除 |
+、- | 算数运算符:加、减 |
<<、>> | 位运算符:左移、右移 |
& | 位运算符:位与 |
^ | 位运算符:位异或 |
| | 位运算符::位或 |
<、<=、>、>=、!=、== | 比较运算符 |