一、运算符
1、 数学运算
+ 加法 - 减法 * 乘法 / 除法 // 除法取整 % 除法取余 ** 幂
2、 赋值运算符
a +=1 等价于 a = a + 1 a -=1 等价于 a = a - 1 a *=2 等价于 a = a * 2 a /=2 等价于 a = a / 2 a //=2 等价于 a = a // 2 a %=2 等价于 a = a % 2 a **=2 等价于 a = a ** 2
3、 比较运算符
> 大于 < 小于 >= 大于等于 <= 小于等于 = 等于 != 不等于
举例:
# 输入a,b,c三个数字,取出最大的那个数
a=int(input("a:")) b=int(input("b:")) c=int(input("c:")) max=0 # 这里可以不定义,也可以定义任意值;我只是为了看看作用域问题,我是菜鸟 if a>=b: max=a if max >= c: pass else: max=c else: max=b if max >= c: pass else: max=c print("最大数字是:",max)
4、 逻辑运算符
逻辑运算符是用来做逻辑计算的。像我们上面用到的比较运算符,每一次比较其实就是一次条件判断,都会相应的得到一个为True或False的值。而逻辑运算符的的操作数就是一个用来做条件判断的表达式或者变量。方法:先把所有and算出来,再算or;同时结合短路原则。
结果为True的时候,我们一般称 结果为 真, 逻辑运算符会有一个真值表。
短路原则:
对于and,如果前面的第一个条件为假,那么这个and前后两个条件组成的表达式的计算结果就一定为假,第二个条件就不会被计算;
对于or,如果前面的第一个条件为真,那么这个or前后两个条件组成的表达式的计算结果就一定为真,第二个条件就不会被计算;
5、 成员运算符
not in 、in (判断某个单词里是不是有某个字母)
成员运算符用来判断一个元素是否是另一个元素的成员。 比如说我们可以判断 “hello” 中是否有 “h”, 得到的结果也是True 或者 False。
>>> "h" in "hello" # 这里的意思是 “h” 在“Hello” 中,判断后结果为True True >>> "h" not in "hello" # 这里的意思是 “h” 不在“Hello” 中,判断后结果为False False
6、 身份运算符
is、is not(讲数据类型时讲解,一般用来判断变量的数据类型)
用来判断身份。
>>> a = 123456 >>> b = a >>> b is a #判断 a 和 b 是不是同一个 123456 True >>> c = 123456 >>> c is a #判断 c 和 a 是不是同一个 123456 False >>> c is not a #判断 c 和 a 是不是不是同一个 123456 True
这里我们首先将123456赋值给a,后有将a赋值给b, 这样其实是 a和b 的值都是123456, 但是后面c的值也是123456,为什么 第一次a is b 的结果为True ,c和 a 的结果为False 呢?
原因是这样的: 我们知道程序是运行在内存里的,第一次 我们将123456赋值给a的时候,其实是在内存里开辟了一块空间,将123456放在这块空间里,为了找到这里的123456, 会有一个指向这块空间的地址,这个地址叫做内存地址,是123456存储在内存中的地址。a其实指向的就是存储123456的内存空间的地址。执行了b=a,就是让b指向的地址和a一样。之后我们执行了 c = 123456 ,这里就会再开辟一块内存空间,并将指向该空间的内存地址赋值给c ,这样的话 ,a和b 指向的是同一个123456, c 指向的是另外一个123456 。
7、 位运算符
我们平时用到的数字在计算机中是以二进制表示的, 这个二进制数叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
比如:十进制中的数 +7 ,计算机字长为8位,转换成二进制就是00000111。如果是 -7 ,就是 10000111 。那么,这里的 00000111 和 10000111 就是机器数。
原码:
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: 11111111 到 01111111 即 -127 到 127
反码:
反码的表示方法是: 正数的反码是其本身 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
补码:
补码的表示方法是: 正数的补码就是其本身 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
案例:
我们设置a=234 (二进制为 11101010), b=44 (二进制为 101100)
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
a = 11101010 = 234
b = 00101100 = 44
a & b = 00101000 = 40
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。
a = 11101010 = 234
b = 00101100 = 44
a | b = 11101110 = 238
^ 按位异或运算符:当两对应的二进位相异时,结果为1
a = 11101010 = 234
b = 00101100 = 44
a ^ b = 11000110 = 198
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1
a = 10000000 = 128
~a = 01111111 = 127
<< 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
a = 10110011 = 179
a << 2 = 1011001100
>> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数;低位丢弃,高位补0;
a = 10110011 = 179
a >> 2 = 00101100 = 44
二、运算符优先级
运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not and or 逻辑运算符
-
and和or判断语句时,遵循短路原则;即:and前面条件为假,后面的不去判断;or前面条件为真,后面条件不去判断;
-
运算符那么多,优先级记不住怎么办? 使用小括号。通过使用小括号,我们就可以很方便的进行优先级的区分。