1.使用位運算判斷一個數(shù)是否是奇數(shù)
n = int(input("請輸入一個整數(shù):"))
if n & 1 == 1:
print(n,"為奇數(shù)")
else:
print(n,"為偶數(shù)")
2.表達式0x13 & 0x17的值是( )
# 先把十六進制轉(zhuǎn)換為二進制
0x13 = 000010011(原) = 000010011(反) = 000010011(補)
0x17 = 000010111(原) = 000010111(反) = 000010111(補)
0x13 & 0x17 = 000010011 & 000010111 = 000010011 = 19
3.若x=-20,y=3則x&y的結(jié)果是( )
# 先把x,y用二進制表示
x = -20 = 110100(原) = 101011(反) = 101100(補)
y = 3 = 000011(原) = 000011(反) = 000011(補)
x & y = 101100 & 000011 = 000000(補) = 000000(反) = 000000(原) = 0
4.表達式 -97 | 120 的運算結(jié)果是()
# 先把-97和120用二進制表示
-97 = 11100001(原) = 10011110(反) = 10011111(補)
120 = 01111000(原) = 01111000(反) = 01111000(補)
-97 | 120 = 10011111 | 01111000 = 11111111(補) = 11111110(反) = 10000001 = -1
5.在位運算中,操作數(shù)每右移一位允懂,其結(jié)果相當(dāng)于( B )
按位運算中,操作數(shù)每右移一位娇妓,相當(dāng)于原數(shù)整除2
A.操作數(shù)乘以2 B.操作數(shù)除以2
C.操作數(shù)除以4 D.操作數(shù)乘以4
6.設(shè)x 是一個整數(shù)(16位).若要通過x|y使x低8位置1,高8位不變,則y的二進制數(shù)是( )
因為正數(shù)的原碼、反碼蹦漠、補碼三碼合一,
因為1 | 0 = 1干签, 1 | 1 = 1津辩,所以低8位置1拆撼,則低8位全為1容劳,
因為0 | 0 = 0, 1 | 0 = 1闸度,所以高8位不變竭贩,則高8為全為0,
所以y的二進制數(shù)為:00000000 11111111
7.總結(jié)常用的位運算使用技巧(自己查自己莺禁,覺得好用記得住的)
技巧一:用&來關(guān)閉某位的值
例如:我們想要關(guān)閉a數(shù)中的第4位留量,而又不影響其它位的現(xiàn)狀,可以用一個數(shù)0xF7,即二進制數(shù)11110111去與a數(shù)作按位“與”運算
0x88 10001000 a數(shù)
&
0xF7 11110111 屏蔽數(shù)
=10000000
技巧二:用|來開啟某位的值
例如:我們想要開啟a數(shù)中的第4位楼熄,而又不影響其它位的現(xiàn)狀忆绰,可以用一個數(shù)0xF7,即二進制數(shù)00001000去與a數(shù)作按位“或”運算
0x80 10000000 a數(shù)
&
0xF7 00001000 開啟數(shù)
=10001000
技巧三:用^直接交換兩個變量的值
如可岂,若有變量a=3错敢,b=4,想要交換它們的值缕粹,可以做如下一組操作:
a^=b
b^=a
a^=b
首先稚茅,a^=b:
a 00000011
^
b 00000100
a=00000111
其次,b^=a:
b 00000100
^
a 00000111
b=00000011
最后平斩,a^=b:
a 00000111
^
b 00000011 -> 3
a=00000100 -> 4