簡體   English   中英

在Python中從有符號整數到無符號整數的轉換

[英]Getting conversion from signed integer to unsigned integer in Python

首先,請原諒我對此類問題的無知,但由於我不擅長Python而無濟於事。

我遇到了以下需要轉換為C ++的Python代碼。

def getSignedNumber(number, bitLength):
    mask = pow(2,bitLength) - 1
    if number & (1 << (bitLength - 1)):
        return number | ~mask
    else:
        return number & mask


def getUnsignedNumber(number, bitLength):
    mask = pow(2,bitLength) - 1
    return number & mask

這用於將unsigned int轉換為signed int,反之亦然。 但是我不知道為什么我們必須這樣做,因為我認為只轉換為對應的類型就足夠了。 也許是因為Python是一種動態類型的語言,並且需要這種操作嗎? 我在這里想念什么嗎?

您是指reinterpret_cast還是dynamic_cast嗎?

長話短說:對於任意位長度的整數,您需要使用它。 以下說明嘗試:

getUnsignedNumber解釋一個內存塊,如nBit號。 這是必要的,因為您只能以特定的塊大小來獲得內存(通常您無法分配3bit,需要分配下一個更大的單位,即字節(字符))。 因此,您需要確保忽略了不需要的5個額外位。

getSignedNumber對帶符號的數字執行相同的操作,但是如果數字為負,則在這里我們需要用符號位填充。 因此,即使對於c,您也需要此功能。 (試想一下,您將-3存儲在char中,並希望將其讀取為無符號的3位數字)

看來,這用於正確填充數字,例如您有一個字符:

c = 10001111

現在,如果您要將其解釋為四位帶符號的類型,則實際上必須將

c = 11111111

因為如果一個數字為負數的二進制補碼,那么前面的所有位實際上都是一個。 但是,如果將其解釋為5位帶符號類型,則會看到符號位為0,因此所有前導位應為零。 所以你必須掩蓋它

c = 00001111

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM