對於初學者來說,理解十進制比較容易,但是對於二進制的理解就稍顯困難。Python中內置的二進制運算符號遵循相應的數學規則,比如x % y取余運算,它可以應用於任意數據類型。本篇文章將詳細講解Python二進制運算的基礎知識和運用。
一、基礎概念
1、二進制基礎知識
在計算機中,所有操作都是以二進制來進行的。二進制只有兩個數碼0和1,由此構成了二進制數。如下圖所示,二進制數的第n位權值為2的(n-1)次方,從右到左分別為2^0,2^1,2^2,2^3,2^4…。每個數碼乘上對應權值,累加起來即為二進制數的值。
10111 = 1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 16 + 0 + 4 + 2 + 1 = 23
2、Python二進制運算符
Python提供了豐富的二進制運算符號,如下表所示:
運算符 | 描述 | 示例 |
---|---|---|
& | 按位與 | 4 & 5 = 4 |
| | 按位或 | 4 | 5 = 5 |
~ | 按位取反 | ~4 = -5 |
^ | 按位異或 | 4 ^ 5 = 1 |
<< | 左移 | 4 << 2 = 16 |
>> | 右移 | 4 >> 2 = 1 |
二、數據類型轉換
Python中二進制數的類型為int類型,無法直接輸出二進制數。因此,在實際應用中需要對數據類型進行轉換。
1、十進制轉二進制
def dec2bin(dec):
if dec == 0:
return '0'
s = ''
while dec:
s = s + str(dec % 2)
dec = dec // 2
return s[::-1]
print(dec2bin(23)) # 輸出10111
上面的方法將十進制數逐位轉化為二進制數,直到整個二進制數全部轉換完畢。
2、二進制轉十進制
def bin2dec(bin):
l = len(bin)
dec = 0
for x in range(l):
dec += int(bin[x]) * 2 ** (l - x - 1)
return dec
print(bin2dec('10111')) # 輸出23
上述方法將二進制數長度l-1,從高位到低位依次計算權值2的倍數,將結果相加即可得到十進制數。
三、運算實例
Python25%2表達式輸出結果為1,這個結果為什麼呢?25的二進制表達式為11001,2的二進制表達式為10,按位進行取余操作後得到的結果為1。
a = 25
b = 2
print(bin(a % b)) # 輸出0b1
四、應用場景
二進制運算在實際應用中有着廣泛的應用,例如位運算、掩碼等。下面以位運算為例,在Python中使用位運算符可以快速進行二進制的計算。
1、位運算
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = a & b; # 12 = 0000 1100
print("a & b 的值為:", c)
c = a | b; # 61 = 0011 1101
print("a | b 的值為:", c)
c = a ^ b; # 49 = 0011 0001
print("a ^ b 的值為:", c)
c = ~a; # -61 = 1100 0011
print("~a 的值為:", c)
c = a << 2; # 240 = 1111 0000
print("a << 2 的值為:", c)
c = a >> 2; # 15 = 0000 1111
print("a >> 2 的值為:", c)
2、IP地址掩碼計算
IP = '192.168.10.1'
netmask = '255.255.255.0'
ip_list = IP.split('.')
netmask_list = netmask.split('.')
for i in range(4):
ip_list[i] = str(int(ip_list[i]) & int(netmask_list[i]))
net = '.'.join(ip_list)
print(net)
上述方法將IP地址和掩碼二進制進行按位與運算,得到的結果為網絡地址。
五、總結
本文介紹了Python中二進制運算的基礎知識和運用,包括二進制的基本概念、Python的二進制運算符、數據類型轉換、運算實例和應用場景等。在實際應用中,二進制運算可以有效地提高計算效率,並且對於計算機網絡等方面有着重要的作用。
原創文章,作者:YEHVP,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/373394.html