C++ 在Python中获取有符号整数到无符号整数的转换

C++ 在Python中获取有符号整数到无符号整数的转换,c++,python,C++,Python,首先,请原谅我问这种问题时的无知,但我无能为力,因为我不擅长Python 我遇到了下面的Python代码,我需要转换成C++。 def getSignedNumber(number, bitLength): mask = pow(2,bitLength) - 1 if number & (1 << (bitLength - 1)): return number | ~mask else: return number &a

首先,请原谅我问这种问题时的无知,但我无能为力,因为我不擅长Python

我遇到了下面的Python代码,我需要转换成C++。

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
def getSignedNumber(数字,位长度):
掩码=pow(2,位长度)-1

如果数字和(1是指
重新解释演员表
还是
动态演员表

长话短说:对于任意位长度的整数,您需要此选项。解释如下:

getUnsignedNumber
将内存块解释为nBit数字。这是必要的,因为您只能获得特定块大小的内存(通常无法分配3位,您需要分配下一个较大的单元,一个字节(char))。因此,您需要确保忽略不需要的5个额外位

getSignedNumber
对有符号的数字也做同样的处理,但是如果数字为负数,我们需要用符号位填充。因此,即使对于c,您也需要此函数。(想象一下,您将-3存储在字符中,并希望将其作为无符号的3位数字读取)

这似乎是用来正确填充数字的,比如说你有一个字符:

c=10001111

现在,如果你想把它解释为一个四位有符号类型,你实际上必须把

c=11111

因为如果一个数字是负数,那么它前面的所有位实际上都是一。但是如果你把它解释为5位有符号类型,你会看到符号位是0,因此所有的前导位都应该是零。所以你必须屏蔽它,以便


c=00001111

Python使用任意精度的整数,因此如果没有像这样的显式转换,在处理不属于自动正确转换的整数范围(0到2^31-1)的数字时,会发生意外情况我使用STATICESTCAST好友。据我所见,C铸造在C++中运行良好。无论如何,谢谢你的回答。”托马斯:我只是想知道你移植的代码是否使用了<代码>不完整< /CARD>初始化(分配char写在7,解释char为3位签名),我猜在这个场景中结果会有所不同。