'''常用运算符
    算术运算符       标准算术运算符:加(+) 减(-) 乘(*) 除(/) 整除(//)
                    取余运算符:%         
                    幂运算符:**               
    赋值运算符
    比较运算符
    布尔运算符
    位运算符'''

print('----算术运算符----')
print(1+1)  #加法运算
print(1-1)  #减法运算
print(2*4)  #乘法运算
print(1/2)  #除法运算
print(11//2)    #5  整除运算
print(11%2)     #取余运算
print(2**3)     #幂运算符
print(9//2)     #2
print(-9//-2)   #2
print(-9//2)    #-5     一正一负的整数公式,向下取整
print(9//-2)    #-5
print(9%-2)     #-1     公式:余数=被除数-除数*商
print(-9%2)     #1

#赋值运算符,运算顺序从右到左  支持链式赋值:a=b=c=20  支持参数赋值:+= -= *= /= //= %=  支持系列解包赋值:a,b,c=20,30,40
print('----赋值运算符----')
i=3+4
print(i)
a=b=c=20    #链式赋值
print(a,id(a))
print(b,id(b))
print(c,id(c))

print('----支持参数赋值----')
a=20
a+=30   #相当于a=a+30
print(a)
a-=10   #相当于a=a-10
print(a)
a*=2    #相当于a=a*2
print(a)    #int
print(type(a))
a/=3
print(a)
print(type(a))  #float
a//=2
print(a)
print(type(a))
a%=3
print(a)
print(type(a))

print('----解包赋值----')
a,b,c=20,30,40
print(a,b,c)
#a,b=20,30,40   报错,因为左右变量的个数不对应

print('----交换两个变量的值----')
a,b=10,20
print('交换之前:',a,b)
a,b=b,a
print('交换之后:',a,b)

print('----比较运算符----')
#比较运算符,比较运算符的结果为bool类型
a,b=10,20
print('a>b吗?',a>b)  #False
print('a=b吗?',a>=b)    #False
print('a==b吗?',a==b)    #False
print('a!=b吗?',a!=b)    #True

'''一个  =  称为赋值运算符,  ==称为比较运算符
    一个标量由三部分组成,标识,类型,值
    ==比较的是值
    比较对象的标识使用   is'''
a=10
b=10
print(a==b)     #True   说明a与b的value值相等
print(a is b)   #True   说明a与b的id标识相等
print(a,id(a),b,id(b))

print('----布尔运算符----')
print('----and并且----')
a,b=1,2
print(a==1 and b==2)    #True   True and True-->True
print(a==1 and b<2)     #False  True and False-->False
print(a!=1 and b==2)    #False  False and True-->False
print(a!=1 and b!=2)    #False  False and False-->False
print('----or或者----')
print(a==1 or b==2)    #True   True or True-->True
print(a==1 or b<2)     #False  True or False-->True
print(a!=1 or b==2)    #False  False or True-->True
print(a!=1 or b!=2)    #False  False or False-->False

print('----not对bool类型操作数取反----')
s1=True
s2=False
print(not s1)
print(not s2)

print('----in和not in----')
s='hello,world'
print('w' in s)
print('l' not in s)

'''位运算符
    将数据转化成二进制进行计算
    位与&     对应数位都是1,结果数位才是1,否则为0
    位或|     对应数位都是0,结果数位才是0,否则为1
    左移位运算符      高位溢出舍弃,低位补0
    右移位运算符      低位溢出舍弃,高位补0'''
print('----位运算符----')
print(4&8)  #按位与&,同为1时结果为1
print(4|8)  #按位或|,同为0时结果为0
print(4<<1) #向左移动1位(移动一个位置)相当于乘2
print(4<<2) #向左移动2位(移动两个位置)相当于乘4
print(4>>1) #向右移动1位(移动一个位置)相当于除2
print(4>>2) #向右移动2位(移动两个位置)相当于除4

'''运算符的优先级
    ()-->算数运算符-->位运算符-->比较运算符-->布尔运算符-->赋值运算符'''