所以我考虑用Python或Lisp编写位板(bitboard)。但是我不知道如何确保在Python中获得64位整数。我一直在阅读文档,并发现mpz库返回一个无符号的32位整数。这是否属实?如果不是,那我应该怎么做?
Python 2有两种整数类型: int
,这是一种带符号的整数,其大小等于您机器的字长(但至少为32位),以及long
,它的大小不受限制。
Python 3只有一种整数类型,称为int
,但它相当于Python 2中的long
。
long(x)
。 - Janne Karila使用gmpy有几种选项。下面是一个使用gmpy的例子:
>>> from gmpy import mpz
>>> a=mpz(7)
>>> bin(a)
'0b111'
>>> a=a.setbit(48)
>>> bin(a)
'0b1000000000000000000000000000000000000000000000111'
>>>
gmpy2是gmpy的开发版本,包括一个名为xmpz的新类型,允许更直接地访问位。
>>> from gmpy2 import xmpz
>>> a=xmpz(7)
>>> bin(a)
'0b111'
>>> a[48]=1
>>> bin(a)
'0b1000000000000000000000000000000000000000000000111'
>>>
还有其他解决方案,例如bitarray,您可能需要查看。
免责声明:我维护gmpy和gmpy2。
gmpy
后,当a=a.setbit(48)
时,由于第一位的原因,a的值会更改为mpz(281474976710663)
。我不确定这是否是预期行为?如果我手动更改'0b1'的开头而不是'0b0'(因为它被转换为48位),那么它就可以正常工作。有没有更好的解决方法? - w4nderlust