[英]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.