如何在Python中將有符號整數轉換為無符號整數?


Python是一種用途廣泛且功能強大的程式語言,憑藉其簡潔性和可讀性,已在開發者中獲得了極高的人氣。它擁有豐富的庫和直觀的語法,已成為各種應用(包括資料分析、Web開發和自動化)的首選語言。Python的一大優勢在於它能夠高效地處理不同資料型別。

在本教程中,我們將探討Python中帶符號整數和無符號整數的概念,並討論為什麼需要在這兩者之間進行轉換。我們將逐步引導您瞭解可用於將帶符號整數轉換為無符號整數的各種方法,並提供逐步說明和示例程式碼。

如何在Python中將有符號整數轉換為無符號整數

帶符號整數是可以表示正數和負數的數值。在Python中,帶符號整數通常使用二進位制補碼錶示法儲存。二進位制補碼錶示法將最高有效位 (MSB) 作為符號位,其中0表示正值,1表示負值。其餘位表示數字的大小。

另一方面,無符號整數只能表示非負值。與帶符號整數不同,它們不為符號分配位。因此,無符號整數中的所有位都用於表示數字的大小。

現在,讓我們考慮帶符號整數和無符號整數可以容納的值範圍。一個8位帶符號整數可以容納-128到127之間的值,而一個16位帶符號整數可以容納-32,768到32,767之間的值。相反,無符號整數利用所有位來表示正值。例如,一個8位無符號整數可以容納0到255之間的值,一個16位無符號整數可以容納0到65,535之間的值。隨著位表示的增加,無符號整數可以容納的值範圍也會擴大。

方法一:使用2**32

在Python中,整數使用固定數量的位表示,通常為32位。要將帶符號整數轉換為其無符號對應物,我們可以簡單地將2**32新增到帶符號整數值。這有效地將帶符號整數的範圍轉換為無符號整數的範圍。

現在,讓我們透過一個例子來看一下這種方法。假設我們有一個帶符號整數signed_int,其值為-42。我們可以使用2**32方法將其轉換為無符號整數,如下所示:

signed_int = -42
unsigned_int = signed_int + 2**32

signed_int變數的值為-42,透過向其新增2**32,我們獲得了0到2**32 - 1範圍內的相應無符號整數值。

為了驗證轉換,讓我們列印原始帶符號整數和生成的無符號整數。

示例

signed_int = -42
unsigned_int = signed_int + 2**32

print("Signed Integer:", signed_int)
print("Unsigned Integer:", unsigned_int)

輸出

Signed Integer: -42
Unsigned Integer: 4294967254

我們可以看到,帶符號整數-42已成功轉換為其無符號表示形式,在本例中為4294967254。

現在我們已經介紹了使用位運算將帶符號整數轉換為無符號整數的第一種方法,讓我們繼續介紹下一種方法。

方法二:使用按位左移運算子(<<)

按位左移運算(在Python中用“<<”表示)將數字的位向左移動指定數量的位置。每次向左移動都會使數字乘以2。例如,將數字5的位向左移動1位將得到10(十進位制表示)。此運算在我們的轉換過程中非常有用。

現在,讓我們透過一個例子來看一下這種方法。讓我們假設我們有一個名為signed_int的帶符號整型變數,其值為-42。對帶符號整數執行按位左移運算,位數由您要移動的位數決定。在本例中,我們將使用32作為要移動的位數。按位左移運算的公式為(signed_int + (1 << 32))。

示例

這是一個演示轉換過程的示例程式碼片段:

signed_int = -42
unsigned_int = signed_int + (1 << 32)

print("Signed Integer:", signed_int)
print("Unsigned Integer:", unsigned_int)

輸出

Signed Integer: -42
Unsigned Integer: 4294967254

輸出確認了轉換,顯示原始帶符號整數為-42,相應的無符號整數為4294967254。請記住,由於沒有符號位,無符號整數可能顯示為一個很大的正數。

使用按位左移方法是另一種在Python中將帶符號整數轉換為無符號整數的方法。

結論

在本教程中,我們討論了Python中帶符號整數和無符號整數的概念,並探討了將帶符號整數轉換為其無符號對應物的方法。通過了解帶符號整數和無符號整數之間的區別,並掌握使用2**32方法和按位左移運算子等技術,我們可以自信地處理需要無符號整數表示的情況。

更新於:2023年7月24日

5K+ 次瀏覽

開啟您的職業生涯

完成課程,獲得認證

開始學習
廣告
© . All rights reserved.