'''
算术运算符
+ 加 - 两个对象相加
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -11
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 210
/ 除 - x 除以 y b / a 输出结果 2.1
% 取模 - 返回除法的余数 b % a 输出结果 1
** 幂 - 返回x的y次幂 a**b 为10的21次方
// 取整除 - 向下取接近除数的整数
'''
a=4
b=2
print(a+b) #6
print(a-b) #2
print(a*b) #8
print(a/b) #2
print(a%b) #0
print(a**b)#16
print(a//b)#2
"""
比较运算符
== 等于 - 比较对象是否相等
!= 不等于 - 比较两个对象是否不相等
> 大于 - 返回x是否大于y
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。
>= 大于等于 - 返回x是否大于等于y。
<= 小于等于 - 返回x是否小于等于y。
"""
a=3
b=5
print(a==b) #False
print(a!=b) #True
print(a>b) #False
print(a<b) #True
print(a>=b) #False
print(a<=b) #True
'''
赋值运算符
= 简单的赋值运算符
+= 加法赋值运算符
-= 减法赋值运算符
*= 乘法赋值运算符
/= 除法赋值运算符
%= 取模赋值运算符
**= 幂赋值运算符
//= 取整除赋值运算符
:= 海象运算符,可在表达式内部为变量赋值。Python3.8 版本新增运算符。
'''
a = 21
b = 7
c = 0
c = a + b
print(c) #28
c += a
print(c) #28+21=49
c *= a
print(c) #49*21=1029
c /= a
print(c) #1029/21=49
c = 2
c %= a
print(c) #2%21=2
c **= a
print(c) #2**21=2097152
c //= a
print(c) #2097152//21=99864
a='2435654321334445432434534'
if (n := len(a)) > 10:
print(n)
'''
位运算符
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。
^ 按位异或运算符:当两对应的二进位相异时,结果为1
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1
<< 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
>> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数
'''
a=30 # a=0001 1110
b=40 #b=0010 1000
print(a&b) #62
'''
换算成二进制,按照上面的规则每一位相与
同为1才是1
0001 1110
0010 1000
----------
0000 1000 ->8
'''
print(a|b) #62
'''
只要有1 就为1
0001 1110
0010 1000
----------
0011 1110 ->2+4+8+16+32=62
'''
print(a^b) #54
'''
相同为0 相异为1
0001 1110
0010 1000
----------
0011 0110 -> 2+4+16+32=54
'''
print(~a) #-31
'''
取反
0001 1110
----------
1110 0001 ->
按照上面的结果,因为计算机规定,二进制最高位为符号为,1为负数,0为正数,上面这个二进制最高位为1 所以是个负数
而负数在内存中存储形式是补码的形式存储
故而要求1110 0001这个数的补码
正数的补码为正数本身
负数的补码是,最高位符号为不变为1,其余各位取反,然后在加1得到补码
1 001 1110 +1=1 001 1111=-(1+2+4+8+16)=-31
至于什么是补码,什么是反码,什么是原码 自己百度
'''
print(a>>2) #表示a 右移2位 得到7
'''
向右边移动,左边位数不够补0
0001 1110 -> 00 0111 左边补 0 ->0000 0111->1+2+4=7
'''
print(a<<2) #120
'''
向左移,右边位数不够补0
0001 1110 ->0111 10 右边补0 -> 0111 1000 -> 8+16+32+64=120
'''