Python中二进制数的二元运算符

0 投票
1 回答
1359 浏览
提问于 2025-04-18 04:34

我注意到,Python里有位运算符,比如说:8 ^ 10,结果是2,这个没问题。另一方面,还有办法把十进制的整数转换成二进制数字,比如bin(2)

我在想,能不能把这两者结合起来。我是说,字符串上没有位运算符,所以像bin(8) ^ bin(10)这样的操作会报错。我猜在对整数使用位运算符时,Python的第一步总是会进行转换。

其实我在考虑如何加快像a ^ b这样的操作,尤其是当a和b都是很大的整数,并且有很多位运算的时候。转换花费的时间太长了,所以我想先把它们转换好,然后再用位运算符来处理。也许把每个数字转换成布尔列表会有帮助,但我想知道有没有人有更好的主意。

非常感谢任何好的建议!

1 个回答

0

你似乎认为Python内部把整数存储成十进制数字的字符串。其实这是完全错误的。整数,包括那些可以非常大的整数(在3.x版本中叫做long),都是以位串的形式存储的。对两个Python整数进行异或运算(XOR)其实就是在内存中对它们的位进行原生的异或操作。它会从内存中加载两个64位的数据到寄存器中,然后尽可能高效地对这些位进行异或运算,最后把结果写回内存。根本不需要进行任何转换。

说实话,实际上它并没有使用那64位中的一些位(这些位是为了在乘法时更容易检测溢出而保留的),但它是通过一直把那些位保持为零来实现的。

撰写回答