繁体   English   中英

当我使用 ctypes.c_int() 它返回一个不同的数字?

[英]When I use ctypes.c_int() it returns a different number?

当我使用下面的代码时,它返回一个不同的数字。

numb = 5000000000
n = ctypes.c_int(numb)

它转换的数字:705032703

5,000,000,000 对于 32 位 integer 来说太大了。 您可以在下面看到它只是截断为 32 位:

>>> n=5000000000
>>> hex(n)
'0x12a05f200'         # 33 bits
>>> import ctypes
>>> hex(ctypes.c_int(n).value)
'0x2a05f200'          # dropped the 33rd bit

您可以通过与 32 位掩码进行与运算来看到相同的结果:

>>> n & 0xffffffff
705032704

ctypes公开了与 C 兼容的类型,其中ctypes.c_int()公开了带符号的int类型,根据平台的不同,它可以是 32 位或 64 位(甚至可能更窄或更宽)。

在您的实例中,您的c_int是 32 位类型,并且 32 位带符号的 int 可以包含范围[-2147483648, 2147483647]4294967296个可能的值。

所以它不能按原样保存你的5000000000 (50 亿),它是由实现定义的溢出处理方式。

如果你想保存大量数字,建议使用像c_int64这样的固定宽度类型,这样你就知道你在处理什么,因为c_intc_long有一些大小保证,但在其他方面是特定于实现/平台的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM