paython菜鸟教程-二进制运算

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值