Python學習筆記 day2 位運算

2021-10-08 08:41:47 字數 1993 閱讀 6586

位運算

利用位運算實現快速計算

通過^快速交換兩個整數

a = a^b  

b = a^b # b = (a^b)^b = a

a = a^b # a = (a^b)^a = b

通過a & (-a)快速獲取a的最後為 1 位置的整數。

00

000101-

>5&

1111

1011

->-5

---00

000001-

>100

001110-

>14&

1111

0010

->-14

---00

000010-

>

2

利用位運算實現整數集合

乙個數的二進位制表示可以看作是乙個集合(0 表示不在集合中,1 表示在集合中)。

比如集合,可以表示成01 00 01 10 10而對應的位運算也就可以看作是對集合進行的操作。

元素與集合的操作:

a |(1

<#把 i 插入到集合中

a &~(1

<#把 i 從集合中刪除

a &(

1<#判斷 i 是否屬於該集合(零不屬於,非零屬於)

集合之間的操作:

~a       #a補

a & b #a交b

a | b #a並b

a &(

~b)#a差b

注意:整數在記憶體中是以補碼的形式存在的,輸出自然也是按照補碼輸出。

【例】python 的bin()輸出。

print

(bin(3

))# 0b11

print

(bin(-

3))# -0b11

print

(bin(-

3&0xffffffff))

# 0b11111111111111111111111111111101

print

(bin

(0xfffffffd))

# 0b11111111111111111111111111111101

print

(0xfffffffd

)# 4294967293

從結果可以看出:

所以為了獲得負數(十進位制表示)的補碼,需要手動將其和十六進製制數0xffffffff進行按位與操作,再交給bin()進行輸出,得到的才是負數的補碼表示。

練習題leetcode 習題 136. 只出現一次的數字

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

嘗試使用位運算解決此題。

題目說明:

"""

input file

example1: [2,2,1]

example2: [4,1,2,1,2]

output file

result1: 1

result2: 4

"""class

solution

(object):

defsinglenumber

(self, nums)

:"""

:type nums: list[int]

:rtype: int

"""output =

0for i in

range

(len

(nums)):

output = output^nums[i]

return output

python學習筆記 day2

函式之間或類的方法之間使用空行分隔,表示乙個新的開始,類和函式入口之間也用空行分隔。空格不是語法的一種,但是最好這樣做,為了方便閱讀和日後的維護 input n按下enter後退出 n value input n請輸入 n print value 接收輸入的資訊並列印python支援同一行內編寫多行...

Python學習筆記 Day2

在python中,for迴圈的功能十分強大,使用起來有些類似c 中的auto型別有些類似 for iterator in sequence 基本形式,iterator的型別和sequence的元素型別相同 for i in hello world print i 輸出字串中的每乙個字元 prime ...

Python學習筆記(day2) 雜談

今天看的知識挺雜的,主要還是集中在判斷語句和列表這一部分 分割線 1 多重判斷 if 和 elif 之間的區別在於占用記憶體不同。多個 if 要求電腦不斷重複判斷,而elif只需要一次判斷。大大提高了電腦讀寫 的速度 2 自增和自減運算。熟練掌握p 2,p 2的含義 3 input 只能接受乙個引數...