53二进制逻辑运算
1=真,0=假
按位与 & :只有1&1=1
0&0=0; 0&1=0; 1&0=0; 1&1=1
按位或 | ,只要有1就是1
0|0=0; 0|1=1; 1|0=1; 1|1=1
异或 ^
(如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。)
0^0=0; 0^1=1; 1^0=1; 1^1=0
54取一个整数a从右端开始的4 ~ 7位。
程序分析:可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
(3)将上面二者进行&运算。
a = int(input("input a number:\n>"))
b = a >> 4
print(b)
c = ~(~0 << 4) # ~是按位取反的符号
print(c)
d = b & c # 与,两个都为1才=1
print("%o\t%o" % (a,d))
# %o —— oct 八进制
# %d —— dec 十进制
# %x —— hex 十六进制
a1 = 1
b1 = 1
print(a1 ^ b1) # 异或,两个相同则为0
a的二进制形式: 111 a的十进制形式: 7
b的二进制形式: -1000 b的十进制形式: -8
变量a取反的结果为:-8 -1000
变量c取反的结果为:6 110
input a number:
>9
0
15
11 0
0
~:按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。
python基础_格式化输出(%用法和format用法) - fat39 - 博客园 (cnblogs.com)
PYTHON : 二进制 、 八进制 、十六进制的转换和输出_pythonformat函数8进制-CSDN博客
55学习使用按位取反~
说明:
二进制数在内存中以补码的形式存储。
按位取反:二进制每一位取反,0 变 1,1 变 0。
最高位为符号位,正数的符号位为 0,负数为 1。
对正数来说,最高位为 0,其余各位代表数值本身(以二进制表示),如 +42 的补码为 00101010。
对负数而言,把该数绝对值的补码按位取反,然后对整个数加 1,即得该数的补码。如 -42 的补码为 11010110(00101010 按位取反
11010101+1 即 11010110)。
~9 的计算步骤:
转二进制:0 1001
计算补码:0 1001
按位取反:1 0110
转为原码:
按位取反:1 1001
末位加 1:1 1010
符号位为 1 是负数,即 -10
a = 7
# bin(a) #二进制是bin=format(a,'b'),8进制是oct=format(a,'o'),16进制是hex==format(a,'X')
print("a的二进制形式:",format(a,'b'),"a的十进制形式:",a) #输出二进制
b = ~a #按位取反
bin(b) #该语句写不写都行
print("b的二进制形式:",format(b,'b'),"b的十进制形式:",b)
c = -7
d = ~c
print("变量a取反的结果为:%d" % b,format(b,'b'))
print("变量c取反的结果为:%d" % d,format(d,'b'))
a的二进制形式: 111 a的十进制形式: 7
b的二进制形式: -1000 b的十进制形式: -8
变量a取反的结果为:-8 -1000
变量c取反的结果为:6 110
说明:
~7,对 7 进行取反,7 的补码是 00000111 对补码取反得到 11111000,最高位 1 为符号位,表示负数,所以该补码对应的整数为 -8。
~-7 对 -7 进行取反,-7 的补码是 11111001 对补码取反得到 00000110,最高位 0 为符号位,表示正数,所以补码对应的整数为 6。