在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
这用于将无符号int转换为有符号int,反之亦然。但我不知道为什么我们必须这样做,因为我认为只选相应的类型就足够了。也许是因为Python是一种动态类型语言,需要这种操作?我是不是遗漏了什么?
您的意思是reinterpret_cast
还是dynamic_cast
?
长话短说:对于任意位长的整数,您需要这样做。下面的解释尝试:
getUnsignedNumber
像nBit数字一样解释存储器块。这是必要的,因为你只获得特定块大小的内存(通常你不能分配3比特,你需要分配下一个更大的单元,一个字节(char))。因此,您需要确保忽略不需要的5个额外位。
getSignedNumber
对有符号数字也是如此,但在这里,如果数字为负数,我们需要用符号位填充。因此,即使对于c,你也需要这个函数。(想象一下,你把-3存储在你的char中,并想把它读成一个无符号的3位数字)
看起来,这是用来正确填充数字的,比如说你有一个字符:
c=10001111
现在,如果你想将其解释为一个四位签名类型,你实际上必须放入
c=11111111
因为如果一个数字是负数,那么它前面的所有位实际上都是一。但是,如果您将其解释为5位有符号类型,您会看到符号位为0,因此所有前导位都应为零。所以你必须掩盖它,这样
c=00001111
相关文章:
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 从 std::string 转换为 const 无符号整数
- 迭代器和无符号整数的重载 + 运算符
- C++,概念不适用于无符号整数作为结果类型?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 原子式清除无符号整数的最低非零位
- 计算机使用什么方法添加无符号整数
- boost::任何带有结构体和无符号整数
- 添加有符号和无符号整数
- 如何安全地比较两个无符号整数计数器?
- 计算 (64 位无符号整数) * (64 位无符号整数) 的商除以 2^64
- 如何将 32 位无符号整数分配给包含 32 位的位字段
- 如何将以"\0"开头的字符 * 转换为无符号整数?
- *(易失性无符号整数 *) 的含义 0x00 = 0x00;
- 为大无符号整数分配内存的有效方法
- 获取两个无符号整数 C++ 乘积的高 32 位的有效方法