python - 如何在python中将有符号整数转换为无符号整数

标签 python integer unsigned signed

假设我有这个号码 i = -6884376。 我如何将它称为无符号变量? 类似于 C 中的 (unsigned long)i

最佳答案

假设:

  1. 您想到了 2 的补码表示;并且,
  2. 作者 (unsigned long)意思是无符号32位整数,

那么你只需要添加2**32 (or 1 << 32)为负值。

例如,将此应用于 -1:

>>> -1
-1
>>> _ + 2**32
4294967295L
>>> bin(_)
'0b11111111111111111111111111111111'

假设 #1 意味着您希望 -1 被视为一个 1 位的实心字符串,假设 #2 意味着您想要其中的 32 个。

但是,除了您之外,没有人可以说出您隐藏的假设是什么。例如,如果您有 1 的补码表示,那么您需要应用 ~前缀运算符。 Python 整数努力给人一种使用无限宽 2 的补码表示的错觉(类似于常规 2 的补码,但具有无限数量的“符号位”)。

要复制平台 C 编译器的功能,您可以使用 ctypes模块:

>>> import ctypes
>>> ctypes.c_ulong(-1)  # stuff Python's -1 into a C unsigned long
c_ulong(4294967295L)
>>> _.value
4294967295L

C 的 unsigned long在运行此示例的盒子上恰好是 4 个字节。

关于python - 如何在python中将有符号整数转换为无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766813/

相关文章:

javascript - Python Selenium 在动态网页上选择复选框

python - 从 hdf5 文件中读取特定列并通过条件

java - 在 Java 中如何将任何整数四舍五入到下一个最高的一百位?

在类成员 `^=` 上使用 `<<` 和 `unsigned long` 时出现 C++ 总线错误

Java 对无符号整数进行位移

java - 将 java.net.InetAddress 转换为长

python - 如何使用 Pyramid 和 socketio 向特定用户广播事件

java - Integer.valueOf() 无效的整数

javascript - Protractor 计数元素并存储整数

python3快速排序列表索引超出范围