gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:54:49 24 4
gpt4 key购买 nike

首先,请原谅我的无知问这种问题,但我不擅长 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

这用于将 unsigned int 转换为 signed int,反之亦然。但我不知道为什么我们必须这样做,因为我认为只需转换为相应的类型就足够了。也许是因为Python是一种动态类型的语言,需要这种操作?我在这里错过了什么吗?

最佳答案

你是说 reinterpret_cast 还是 dynamic_cast

长话短说:对于任意位长整数,您需要这个。下面的解释尝试:

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

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

看来,这用于正确填充数字,假设您有一个字符:

c = 10001111

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

c = 11111111

因为如果一个数字在二进制补码中为负数,则它前面的所有位实际上都是一个。但是,如果您将其解释为 5 位带符号类型,您会看到符号位为 0,因此所有 前导位都应为零。所以你必须掩盖它,这样

c = 00001111

关于c++ - 在 Python 中获取从有符号整数到无符号整数的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com