1.使用位运算判断一个数是否是奇数
num = int(input('请输入一个数:'))
if num & 1 == 1:
print('%d是奇数' % num)
else :
print('%d不是奇数' % num)
2.表达式0x13&0x17的值是( 19)
print(bin(0x13)) = 0b10011 ->010011(原码) -> 010011(反码) -> 010011(补码)
print(bin(0x17)) = 0b10111 ->010111 ->010111 -> 010111(反码) -> 010111(补码)
0x13 & 0x17 ==> 010011 & 010111 ==> 010011
010011(补码) -> 010011(反码) -> 010011(原码) -> 0b10011 -> 19
print(0x13 & 0x17) # 19
3.若x=-20,y=3则x&y的结果是(0 )
x = -20 = -0b10100 = 110100(原码) = 101011(反码)= 101100(补码)
y = 3 = 0b00011 = 000011(原码) = 000011(反码) = 000011(补码)
x & y ==> 101100 & 000011 ==> 000000 ==> 0
print(-20 & 3) # 0
4.表达式 -97 | 120 的运算结果是()
-97 = -0b1100001 = 11100001(原码) = 10011110(反码) = 10011111(补码)
120 = 0b1111000 = 01111000(原码)= 01111000(反码) = 01111000(补码)
-97 | 120 ==> 10011111 | 01111000 ==> 11111111(补码) ==> 11111110(反码) ==> 10000001(原码) ==> -0b1 = -1
print(-97 | 120)# -1
5.在位运算中,操作数每右移一位,其结果相当于(B)
print(4 >> 1)# 2 4 >> 1 = 4 // 2 = 2
A.操作数乘以2 B.操作数除以2
C.操作数除以4 D.操作数乘以4
6.设x 是一个整数(16位).若要通过x|y使x低度8位置1,高8位不变,则y的二进制数是( )
00000000 11111111
7.一些常见的二进制位的变换操作:
注: shr--右移;shl--左移;xor--异或;or--或运算;and--与运算
序号 | 功能 | 示例 | 位运算 |
---|---|---|---|
1 | 去掉最后一位 | (101101->10110) | x shr 1 |
2 | 在最后加一个0 | (101101->1011010) | x shl 1 |
3 | 在最后加一个1 | (101101->1011011) | x shl 1+1 |
4 | 把最后一位变成1 | (101100->101101) | x or 1 |
5 | 把最后一位变成0 | (101101->101100) | x or 1-1 |
6 | 最后一位取反 | (101101->101100) | x xor 1 |
7 | 把右数第k位变成1 | (101001->101101,k=3) | x or (1 shl (k-1)) |
8 | 把右数第k位变成0 | (101101->101001,k=3) | x and not (1 shl (k-1)) |
9 | 右数第k位取反 | (101001->101101,k=3) | x xor (1 shl (k-1)) |
10 | 取末三位 | (1101101->101) | x and 7 |
11 | 取末k位 | (1101101->1101,k=5) | x and (1 shl k-1) |
12 | 取右数第k位 | (1101101->1,k=4) | x shr (k-1) and 1 |
13 | 把末k位变成1 | (101001->101111,k=4) | x or (1 shl k-1) |
14 | 末k位取反 | (101001->100110,k=4) | x xor (1 shl k-1) |
15 | 把右边连续的1变成0 | (100101111->100100000) | x and (x+1) |
16 | 把右起第一个0变成1 | (100101111->100111111) | x or (x+1) |
17 | 把右边连续的0变成1 | (11011000->11011111) | x or (x-1) |
18 | 取右边连续的1 | (100101111->1111) | (x xor (x+1)) shr 1 |
19 | 去掉右起第一个1的左边 | (100101000->1000) | x and (x xor (x-1)) |
20 | 后四位取反 | 100101010->100100101 | x xor 00001111 |
21 | 交换两个数 | 1010,1111(a)->1111,1010(b) | a=a xor b;b=b xor a;a=a xor b |
示例:
1.去掉最后一位
print(bin(123))#0b1111011
print(bin(0b1111011 >> 1))#0b111101
2.在最后加一个0
print(bin(123))#0b1111011
print(bin(0b1111011 << 1))#0b11110110
网友评论