簡介
python 中的位運算符
1|1=1 0|1=1 1|0=1 0|0 = 0
即參加運算的兩個對象只要有一個爲1,其值爲1。
4|3= 7 (轉化爲二進制至關於 100 | 011 = 111 )
複製代碼
1&1=1 0&1=0 0&0=0 1&0=0
即:兩位同時爲「1」,結果才爲「1」,不然爲0
4&3= 0 (轉化爲二進制至關於 100 & 011 = 000 )
複製代碼
1^1=0 0^1=1 1^0=1 0^0=0
即:兩位相同爲「0」,不一樣才爲「1」
4^3 = 7 (轉化爲二進制至關於 100 ^ 011 = 111)
異或的幾條性質:
一、交換律 a^b = b^a
二、結合律 a^b^c = a^(b^c)
三、對於任何數x,都有x^x=0,x^0=x
四、自反性: a^b^b=a^0=a;
複製代碼
將二進制數+1以後乘以-1,x的按位翻轉是-(x+1)
數字 1 在計算機中表示是由計算機字符編碼決定的[1]
utf-8,對萬國碼進行按類壓縮,優化存放空間
數字1:00000001,8位
漢字:3個字節
~1 = ~(0000 0001) 至關於 (1111 1110) 可能我會覺得 這個數字是至關大的一個數了,可是用python解釋器打印
倒是-2 緣由是由於計算機在存儲數值中有一個符號位 正數的符號位是0 負數的符號位爲1 而計算機中有涉及源碼 反碼補碼中
咱們通常用補碼錶示負數,因此,對-2絕對值原碼取反加1,獲得1111 1101+1 = 1111 1110 反過來就是 1
複製代碼
1 << 1 = 2 2<< 1 = 4
左移1位後a = a *2
複製代碼
1 >> 1 = 0 2 >> 1 = 1
左移1位後a = a / 2
複製代碼
相關問題
def conver(n):
""" 10進制轉2進制 """
if n==0:
return 0
temp = []
while n:
temp.append(n%2)
n = n>>1
temp.reverse()
return "".join([str(x) for x in temp])
def reconver(str1):
""" 2進制轉10進制 """
temp = [int(x)for x in list(str1)]
temp.reverse()
sum = 0
for i in range(0,len(temp)):
sum += pow(2,i) * temp[i]
return sum
複製代碼
def is_odd(n):
if n&1 == 1:
print("奇數")
else:
print("偶數")
複製代碼
5 ( 101 )
5 & 4 (101 & 100 = 100 )
4 & 3 (100 & 011 = 000)
>>>>> 2
def totle_num(n):
""" 整數n的二進制中1的個數 n&(n-1)這個式子什麼做用?把n的二進制數字中最右邊的1變爲0 """
count = 0
while n:
count+=1
n = n&(n-1)
print(count)
複製代碼
def singleNumber(nums):
""" [0,1,2,0,1,2,3] 給定一個非空整數列表,除了某個元素只出現一次之外,其他每一個元素均出現兩次。找出那個只出現了一次的元素。leetcode 136 """
ret = 0
for x in nums:
ret = ret ^x
return ret
複製代碼
1. 給定一個包含 0..n 中 n 個數的列表,找出 0 .. n 中沒有出如今序列中的那個數。 leetcode 268
[1,3,0] 2
0^1^2^3^1^3^0 2
ret = 0
for i in range(0,n+1)
ret ^= i
for i in range(0,len(nums)):
ret ^= nums[i]
return ret
2. 1-n 放在含有 n+1 個元素的列表中,只有惟一的一個元素值重複,其它均只出現一次.
每一個列表元素只能訪問一次,設計一個算法,將它找出來;不用輔助存儲空間。 進階版 leetcode 287
[1,2,2,3] 2
0^1^2^3^1^2^2^3 = 2
複製代碼
def readVarint(trans):
result = 0
shift = 0
while True:
x = trans.readAll(1) // 讀取下一個字符
byte = ord(x) // 轉成整數表示
result |= (byte & 0x7f) << shift // 將該字節去掉最高位放在已有結果的左側
if byte >> 7 == 0: // 若是該字節最高位是0,結束
return result
shift += 7
複製代碼