位运算的学习内容

 1 # 二、位运算符
 2 # 对于二进制补码按位进行运算
 3 # & 与:两个操作数都取补码,对位进行&,如果两个位都是1,则返回1,否则返回0
 4 # | 或:对位进行|,如果两个位中有一个为1,则结果为1,否则为0
 5 # ^ 异或:对位进行^,如果两个位不一样为1,否则为0
 6 # << 左位移:对于补码进行向左移动,右边使用符号位0补齐。每移动一位,则相当于*2
 7 # >> 右位移:对于补码进行向右移动,左侧以符号位填充。每移动一位,相当于除以2,如果不能整除,则相当于向下取整
 8 # ~ 按位取反:一元运算符 ,获得补码,包括符号位都取反。
 9 a=0b10001
10 b=0b01011
11 #   00001
12 
13 c=-2
14 d=5
15 # -2  1010  1110补码
16 #     0101  0101补码
17 #           0100补码
18 print(c&d)
19 
20 # -2  1010  1110补码
21 #     0101  0101补码
22 # |         1111补码 1001----  -1
23 print(c|d)
24 
25 # -2  1010  1110补码
26 #     0101  0101补码
27 #           1011补码  1101----  -5
28 print(c^d)
29 
30 # 2
31 # 0010
32 #00100---4
33 print(2<<1)
34 
35 
36 # 2
37 # 0000 0010
38 # 00 001000---8
39 print(2<<2)
40 
41 print(2<<3)#---16   2*2**3=16
42 
43 print(15<<3)  #15*2**3
44 
45 
46 
47 # 2 >>1
48 #0010
49 #0001----1
50 print(2>>1)
51 
52 #15 >>1
53 # 0000 1111
54 # 0000 0111-----7   15//2 =7
55 print(15>>1)
56 print(-15>>1)
57 
58 # 0000 1111
59 # 1111 0000----10010000---  - 16
60 print(~15)

# 以十六位机模拟:
# -27-------->二进制补码 0b 1000 0000 0001 1011
# -27<<3----->-27左移3位的二进制补码 0b 1000 0000 1101 1000------>十进制 -216
# -27>>3----->-27右移3位的二进制补码 0b 1000 0000 0000 0100------>十进制 -4

print(-27<<3)
print(-27>>3)

num = int(input('请输入一个数字:'))
# 位运算中左移n为相当于2^n,则 7 = 2^3 - 2^0,理解为num向左移3位减去num
print((num << 3) - num)

乘法运算:左移n位相当于乘以2^n,所有的数字均可由此变化
除法运算:右移n位相当于除以2^n,除不尽的向下取整

猜你喜欢

转载自www.cnblogs.com/syd123/p/11701075.html