位操作是程序設(shè)計(jì)中對(duì)位模式按位或二進(jìn)制數(shù)的一元和二元操作。位運(yùn)算符中断医,除 ~ 以外黔衡,其余均為二元運(yùn)算符。
有六種位運(yùn)算符:
&: 按位與
|: 按位或
^: 按位異或
~: 取反
<<: 左移
>>: 右移
運(yùn)算方法
按位與預(yù)算
按位與運(yùn)算符"&"是雙目運(yùn)算符耗美。 其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相與京髓。只有對(duì)應(yīng)的兩個(gè)二進(jìn)位均為1時(shí)航缀,結(jié)果位才為1 ,否則為0堰怨。參與運(yùn)算的數(shù)以補(bǔ)碼方式出現(xiàn)芥玉。
例如:9&5可寫(xiě)算式如下: 00001001 (9的二進(jìn)制補(bǔ)碼)&00000101 (5的二進(jìn)制補(bǔ)碼) 00000001 (1的二進(jìn)制補(bǔ)碼)可見(jiàn)9&5=1。 按位與運(yùn)算通常用來(lái)對(duì)某些位清0或保留某些位备图。例如把a(bǔ) 的高八位清 0 灿巧, 保留低八位, 可作 a&255 運(yùn)算 ( 255 的二進(jìn)制數(shù)為11111111)揽涮。
按位或預(yù)算
按位或運(yùn)算符“|”是雙目運(yùn)算符抠藕。 其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相或。只要對(duì)應(yīng)的二個(gè)二進(jìn)位有一個(gè)為1時(shí)蒋困,結(jié)果位就為1盾似。參與運(yùn)算的兩個(gè)數(shù)均以補(bǔ)碼出現(xiàn)。
9|5 => 00001001 | 00000101 = 00001101 => 13
按位異或預(yù)算
按位異或運(yùn)算符“^”是雙目運(yùn)算符雪标。 其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相異或零院,當(dāng)兩對(duì)應(yīng)的二進(jìn)位相異時(shí),結(jié)果為1村刨。
9|5 => 00001001 | 00000101 = 00001100 => 12
求反運(yùn)算
求反運(yùn)算符~為單目運(yùn)算符告抄,具有右結(jié)合性。 其功能是對(duì)參與運(yùn)算的數(shù)的各二進(jìn)位按位求反嵌牺。
~(1001) => 0110
左移運(yùn)算
左移運(yùn)算符“<<”是雙目運(yùn)算符打洼。左移n位就是乘以2的n次方。 其功能把“<<”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位髓梅,由“<<”右邊的數(shù)指定移動(dòng)的位數(shù)拟蜻,高位丟棄,低位補(bǔ)0枯饿。
a<<4 => 00000011 * 2^3 => 00110000
右移運(yùn)算
右移運(yùn)算符“>>”是雙目運(yùn)算符酝锅。右移n位就是除以2的n次方
給定一個(gè)整數(shù),編寫(xiě)一個(gè)函數(shù)來(lái)判斷它是否是 2 的冪次方奢方。
def isPowerOfTwo(self, n):
return not n<=0 and (n & (n-1)) == 0