首先,请原谅我无知问这个问题,但我不能帮助,因为我不擅长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是一种动态类型语言并且需要这种操作?我在这里错过了什么吗?
答案 0 :(得分:1)
您的意思是reinterpret_cast
还是dynamic_cast
?
长话短说:你需要这个任意位长整数。下面的解释尝试:
getUnsignedNumber
解释一块内存,就像一个nBit号码。这是必要的,因为你只获得了某些块大小的内存(通常你不能分配3bit,你需要分配下一个更大的单元,一个字节(char))。因此,您需要确保忽略不需要的5个额外位。
getSignedNumber
对带符号的数字执行相同操作,但是如果数字为负数,我们需要使用符号位填充。因此,即使对于c,您也需要此功能。 (想象一下,你在你的char中存储-3并希望将其作为无符号3位数字读取)
看来,这用于正确填充数字,比如你有一个字符:
c = 10001111
现在如果你想将它解释为四位有符号类型,你实际上必须放
c = 11111111
因为如果一个数字在二进制补码中为负,那么它之前的所有位实际上都是一位。但是,如果将其解释为5位有符号类型,则会看到符号位为0,因此所有前导位应为零。所以你必须掩盖它以便
c = 00001111