简写形式相当于把算术运算符移到等号左边,然后略去等号右边的c。
相当于把数字看做二进制的形式进行逻辑运算。
a=60 b=13
注意取反运算符~:
比如5的二进制形式是0000 0101,~5的二进制就是1111 1010 ,这是一个负数,而负数在计算机中是以补码(符号位不变,其余位取反再加1)的形式存储,所以~5的真实二进制形式是1000 0101+0000 0001=1000 0110=十进制6,加上符号就是-6。
同理,~-5,首先-5的原码是 1000 0101,负数是以补码的形式存储,所以-5的补码是1111 1010+0000 0001=1111 1011,然后取反运算符号按位逐一取反,得到0000 0100,即十进制正数4。
按位反转仅能用在数字前面。所以写成 3+~5 可以得到结果-3,写成3~5就出错了。
另外左移或者右移运算符,不是循环式的高位或者低位移出范围就丢弃。
1 print(0 and 1) # =>0,0等同于False 2 print(False and 1) # =>False 3 print(-1 and 1) # =>1 4 print(1 or False) # =>1,非零等同于True 5 print(True or False)# =>True 6 print(-1 or 0) # =>-1
and注解:
or注解:
and-or结合使用:
1 (1 and ‘x‘) or ‘y‘
常用在比较两个对象的存储单元。
1 #!/usr/bin/python3 2 3 a = 20 4 b = 20 5 6 if ( a is b ): 7 print ("1 - a 和 b 有相同的标识") 8 else: 9 print ("1 - a 和 b 没有相同的标识") 10 11 if ( id(a) == id(b) ): 12 print ("2 - a 和 b 有相同的标识") 13 else: 14 print ("2 - a 和 b 没有相同的标识") 15 16 # 修改变量 b 的值 17 b = 30 18 if ( a is b ): 19 print ("3 - a 和 b 有相同的标识") 20 else: 21 print ("3 - a 和 b 没有相同的标识") 22 23 if ( a is not b ): 24 print ("4 - a 和 b 没有相同的标识") 25 else: 26 print ("4 - a 和 b 有相同的标识")
结果
1 a 和 b 有相同的标识 2 a 和 b 有相同的标识 3 a 和 b 没有相同的标识 4 a 和 b 没有相同的标识
关于id()的补充:
1 a=500000 2 b=500000 3 c=500000 4 print(id(a)) 5 print(id(b)) 6 print(id(c))
得到的结果是
1 14408976 2 14408976 3 14408976
原因:在交互式环境中,编译器会有一个小整数池的概念,会把(-5,256)间的数预先创建好,而当超过这个范围的时候,变量就会指向不同的对象了,因此地址也会不一样。
原文:https://www.cnblogs.com/zhangyanlong/p/11306288.html