Python 位運算子規則 原理與用法

2021-09-03 02:40:22 字數 2320 閱讀 5512

一、預備知識:

1.十進位制轉二進位制&二進位制轉十進位制

2.**實現:

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

#十進位制轉二進位制

x = input("請輸入十進位制整數:")

x = int(x)

x = bin(x)

print(" 二進位制:",x[2:])

#二進位制轉十進位制

x = input("請輸入二進位制整數:")

x = int(x,2)

print(" 十進位制結果為:",x)

二、運算方法與規則:1.前言:在python中,位運算子包括位與(&)、位或(|)、位求反(~)、位異或(^)、左移位(右移位(>>)。

2.運算方法與規則:位運算子只能適用於整數,其總體運算規則為:首先把整數轉換為二進位制表示形式,按最低位對齊,短的高位補0,然後進行位運算,最後把得到的二進位制轉換為十進位制數。

3.具體規則:

4. 舉例說明:

以13&17為例,首先把13轉換為二進位制數1101,把17轉換為10001,然後按最低位對齊,13的二進位制形式高位補0得到01101,按位進行與運算:

01101 <====13

10001 <====17

00001 ====>1

如果要計算13|17,則計算方法如下:

01101 <====13

10001 <====17

11101  ====>29

如果要計算13^17,則計算方法如下:

01101 <====13

10001 <====17

11100 ====>28

以13<<1為例,首先將13轉換為二進位制形式1101,然後左移1位,最低位補0,得11010,轉換為十進位制數為26,相當於13*2。

以13>>1為例,首先將13轉換為二進位制形式1101,然後右移1位,最低位丟棄,最高位使用符號位0補充,得110,轉換為十進位制數為6,相當於13//2。

位求反比較難理解一些,並不是簡單地按位求反。這裡的關鍵在於,計算機內部是使用二進位制補碼形式來儲存資料的,整數的補碼與原碼相同,而負數的補碼為其絕對值的原碼各位求反再加1,這是理解位求反運算的關鍵。以~13為例,計算過程為:首先把13轉換為二進位制形式00001101(這裡以8位為例,這不影響計算過程和結果),各位求反得到11110010,這是乙個負數的二進位制補碼形式,其對應的數值是-14。再以~(-123)為例,首先將其轉換為二進位制補碼形式10000101,然後按位求反得01111010,轉換為十進位制為122。

三、應用(演算法實現):

1.1.演算法功能:給定乙個非空整數陣列,除乙個元素外,每個元素出現兩次。找到那乙個。

1.2.**實現:

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

## algorithm function:

class solution:

def singlenumber(self, nums):

""":type nums: list[int]

:rtype: int

"""res = 0

for i in nums:

res = res^i

return res

a = solution().singlenumber([1,1,2])

print(a)

2.1運算案例:針對乙個字串中的字元元素進行位運算。

2.2運算過程展示:

位運算子與位運算

位運算是對二進位制位的操作,它應用於整形資料,把整形資料看成固定的二進位制序列,然後對二進位制序列進行位運算 按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例c a b a 1010...

python運算子 之位運算子

支援的資料型別有數字 集合 set 僅支援 交集 並集 不同集 其他型別都不支援位運算。按位運算子是把數字看作二進位制來計算的。位運算子作用於所有的位上,並且按位運算。python中按位運算法則如下 假設a 60,b 13 操作符描述例項 按位與運算子,當且僅當兩個運算元的某一位都非0時,該位的結果...

Python位運算子

按位運算子是把數字看作二進位制來進行計算的。python中的按位運算法則如下 下表中變數 a 為 60,b 為 13,二進位制格式如下 a 0011 1100 b 0000 1101 a b 0000 1100 a b 0011 1101 a b 0011 0001 a 1100 0011運算子 描...