1.使用位運(yùn)算判斷一個(gè)數(shù)是否是奇數(shù)
n = int(input("請輸入一個(gè)整數(shù):"))
if n & 1 == 1:
print(n,"為奇數(shù)")
else:
print(n,"為偶數(shù)")
2.表達(dá)式0x13 & 0x17的值是( )
# 先把十六進(jìn)制轉(zhuǎn)換為二進(jìn)制
0x13 = 000010011(原) = 000010011(反) = 000010011(補(bǔ))
0x17 = 000010111(原) = 000010111(反) = 000010111(補(bǔ))
0x13 & 0x17 = 000010011 & 000010111 = 000010011 = 19
3.若x=-20,y=3則x&y的結(jié)果是( )
# 先把x,y用二進(jìn)制表示
x = -20 = 110100(原) = 101011(反) = 101100(補(bǔ))
y = 3 = 000011(原) = 000011(反) = 000011(補(bǔ))
x & y = 101100 & 000011 = 000000(補(bǔ)) = 000000(反) = 000000(原) = 0
4.表達(dá)式 -97 | 120 的運(yùn)算結(jié)果是()
# 先把-97和120用二進(jìn)制表示
-97 = 11100001(原) = 10011110(反) = 10011111(補(bǔ))
120 = 01111000(原) = 01111000(反) = 01111000(補(bǔ))
-97 | 120 = 10011111 | 01111000 = 11111111(補(bǔ)) = 11111110(反) = 10000001 = -1
5.在位運(yùn)算中,操作數(shù)每右移一位,其結(jié)果相當(dāng)于( B )
按位運(yùn)算中,操作數(shù)每右移一位,相當(dāng)于原數(shù)整除2
A.操作數(shù)乘以2 B.操作數(shù)除以2
C.操作數(shù)除以4 D.操作數(shù)乘以4
6.設(shè)x 是一個(gè)整數(shù)(16位).若要通過x|y使x低8位置1,高8位不變,則y的二進(jìn)制數(shù)是( )
因?yàn)檎龜?shù)的原碼、反碼、補(bǔ)碼三碼合一,
因?yàn)? | 0 = 1, 1 | 1 = 1,所以低8位置1,則低8位全為1,
因?yàn)? | 0 = 0, 1 | 0 = 1,所以高8位不變,則高8為全為0,
所以y的二進(jìn)制數(shù)為:00000000 11111111
7.總結(jié)常用的位運(yùn)算使用技巧(自己查自己,覺得好用記得住的)
技巧一:用&來關(guān)閉某位的值
例如:我們想要關(guān)閉a數(shù)中的第4位,而又不影響其它位的現(xiàn)狀,可以用一個(gè)數(shù)0xF7,即二進(jìn)制數(shù)11110111去與a數(shù)作按位“與”運(yùn)算
0x88 10001000 a數(shù)
&
0xF7 11110111 屏蔽數(shù)
=10000000
技巧二:用|來開啟某位的值
例如:我們想要開啟a數(shù)中的第4位,而又不影響其它位的現(xiàn)狀,可以用一個(gè)數(shù)0xF7,即二進(jìn)制數(shù)00001000去與a數(shù)作按位“或”運(yùn)算
0x80 10000000 a數(shù)
&
0xF7 00001000 開啟數(shù)
=10001000
技巧三:用^直接交換兩個(gè)變量的值
如,若有變量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