Python之位运算符


& / ^ ~ << >>
① & 按位与运算符:两个都为1,结果为1,否则为0
② | 按位或运算符:只要有一个为1.结果就 为1
③ ^ 按位异或运算符:当两个二进位相异时,结果为1
④ ~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,0变为1
⑤ << 左移
⑥ >> 右移

& 按位与运算符:

"""
1为真 0为假
0&0 ---> 0
1&1 ---> 1
1&0 ---> 0
0&0 ---> 0

n1 = 0b0110  # 6
n2 = 0b0010  # 2
------------------------
0b0010 ---->  十进制:2

5&9 ---> 1
0101
1001
------------------------
0001 ---> 1
"""
n1 = 0b0110  # 6
n2 = 0b0010  # 2
print(n1 & n2)    #  2
print(5&9)        #  1  

^ 按位异或运算符:

"""
^ 异或:上下两个二进位相异时,结果为1,相同为0
"""
print(n1 ^ n2)   # 2
print(5^9)       # 12

~ 按位取反运算符:

明确:
1.已知十进制负数,求二进制负数:
①正数的原码 ②原码取反 ③加1 -----> 得到的二进制就是负数的二进制

    -7的进制
    ①正数的原码 0000 0111
    ②原码取反 1111 1000 
    ③加1 1111 1001-7的二进制)

2.已知二进制负数,求对应的十进制:
(判断是否是负的二进制的依据,看二进制的最高位:1111 1010,最高位是1则为负数,0则为正数)
①负的二进制 ②二进制减1 ③取反 ④原码 ⑤将原码转成十进制,在十进制前面添加负号:-

    1111 1010的十进制
    ①负的二进制 1111 1010
    ②二进制减1 1111 1001
    ③取反 0000 0110 
    ④原码 0000 0110 ---> 6
    ⑤将原码转成十进制,在十进制前面添加负号:-  ---> -6

例题:

n1 = 0b0110
print(~n1)  # 0000 0110 ---> 1111 1001 ---> 1111 1000 --->0000 0111 --->  -7
print(~5)   # 0000 0101 ---> 1111 1010 ---> 1111 1001 --->0000 0110 --->  -6

练习题:
1.~7 —> 打印出来的十进制是多少?
2.-9的二进制表示。
3.~-4,打印出来的十进制是多少?
4.1111 1101的十进制表示。

1.~7 ---> 打印出来的十进制是多少?
0000 0111 ---> 1111 1000 ---> 1111 0111 ---> 0000 1000 ---> -8
2.-9的二进制表示。
0000 1001 --->1111 0110 --->1111 0111
3.~-4,打印出来的十进制是多少?
0000 0100 --->1111 1011 --->1111 1100 ---> 0000 0011 ---> 3
4.1111 1101的十进制表示。
1111 1101 ---> 1111 1100 ---> 0000 0011 ----> -3

<< 左移

>> 右移

n = 12  # 00001100
print(n << 1)  # 24   12 * 2
print(n << 2)  # 48   12 * 2 * 2
print(n << 3)  # 96   12 * 2 * 2 * 2

n = 12  # 00001100
print(n >> 1)  # 6   12 // 2
print(n >> 2)  # 3   12 //( 2 * 2 )
print(n >> 3)  # 1   12 //( 2 * 2 * 2 )
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值