劍指Offer(五) 位運算

2021-10-21 04:33:47 字數 733 閱讀 4877

寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。

#位運算

# -*- coding:utf-8 -*-

class solution:

def add(self, num1, num2):

# write code here

a, b = num1, num2

while b != 0:

a, b = a ^ b, (a & b) << 1

a &= 0xffffffff

return a if a >> 31 <= 0 else a ^ (~0xffffffff)

# -*- coding:utf-8 -*-

class solution:

def add(self, num1, num2):

# write code here

a, b = num1, num2

while b != 0:

a,b = (a^b) & 0xffffffff,((a&b)<<1) & 0xffffffff

return a if a<=0x7fffffff else ~(a^0xffffffff)

(1)兩個數異或:相當於每一位相加,而不考慮進製

(2)兩個數相與,並左移一位:相當於求得進製;

(3)將上述兩步的結果相加

python需要越界檢查。

劍指offer 學習筆記 位運算

位運算是把數字用二進位制表示後,對每一位上的0或者1的運算。面試題15 二進位制中1的個數。請實現乙個函式,輸入乙個整數,輸出該數二進位制表示 即補碼表示 中1的個數。例如,把9表示成二進位制是1001,有2位是1。因此,如果輸入9,則函式輸出2。很快我們得到乙個思路,先判斷該數二進位制表示中右邊一...

位運算劍指offer經典題

40.乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。陣列裡包含了兩個只出現一次的數字,那麼所有數字依次異或的結果就是這兩個只出現一次的數字的異或結果。我們要想辦法利用這個異或結果,把陣列分為兩個子陣列,乙個子陣列包含乙個只出現一次的數字,另乙個陣列包含另...

劍指offer刷題記錄 位運算

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。由於數字在計算機中儲存的形式就是二進位制,因此可以直接將數字與1相與來判斷二進位制形式下最低位是否為1,然後右移數字繼續判斷直到數字為0即可。但是還要考慮負數形式,由於負數在儲存時,最高位有一符號位,在右移過程中最高位會不斷補1,所以...