Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中二进制数上的二进制运算符_Python_Binary_Bitwise Operators - Fatal编程技术网

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

Python中二进制数上的二进制运算符,python,binary,bitwise-operators,Python,Binary,Bitwise Operators,正如我注意到的,一方面,Python中有位运算符,比如:8^10,结果是2,这很好。 另一方面,有一些方法可以将基数为10的整数转换为二进制数,例如bin(2) 我想知道是否可以将这两者结合起来,我的意思是字符串上没有按位运算符,因此,bin(8)^bin(10)只会抛出一个错误。我想在整数上使用位运算符时,Python的第一步始终是转换 实际上,我在想,当a和b都是大整数并且有很多按位运算时,如何加速像a^b这样的运算。转换需要太多的时间,所以我想首先转换它们,然后再使用位运算符进行操作。 也

正如我注意到的,一方面,Python中有位运算符,比如:
8^10
,结果是2,这很好。 另一方面,有一些方法可以将基数为10的整数转换为二进制数,例如
bin(2)

我想知道是否可以将这两者结合起来,我的意思是字符串上没有按位运算符,因此,
bin(8)^bin(10)
只会抛出一个错误。我想在整数上使用位运算符时,Python的第一步始终是转换

实际上,我在想,当a和b都是大整数并且有很多按位运算时,如何加速像
a^b
这样的运算。转换需要太多的时间,所以我想首先转换它们,然后再使用位运算符进行操作。 也许将每个数字转换成布尔列表会有所帮助,但如果有人有更好的想法,我很感兴趣


非常感谢您的建议

您似乎假设Python在内部将整数存储为十进制数字字符串。这是完全错误的。整数,甚至是任意精度的整数(
long
在3.x中),都存储为位字符串。对两个Python整数进行异或运算只是对存储在内存中的位执行本机异或操作。它将内存中的2x64位加载到寄存器中,在CPU允许的情况下,对这些位进行异或运算,并将结果写回内存。不需要转换


老实说,它没有使用其中的一些64位(这是为了在乘法中更容易检测溢出),但它只是通过始终将这些位保留为零来实现这一点。

当计算机本身以二进制格式存储在内存中时,为什么要转换这些值
bin(x)
不会将
x
从十进制转换为二进制,它只会返回一个
0
s和
1
s字符串来显示
x
的二进制表示形式。值得注意的是
bin()
实际上不会将整数转换为“二进制数”,而是将整数转换为包含数字二进制表示形式的字符串。请尝试
type(bin(x))
它只返回
str
。就像我上面说的,我想避免任何不必要的转换。因此,据我所知,按位运算符仅适用于(10个基数)整数和布尔值,但以二进制计算,然后返回到10个基数整数,这似乎有点太多了。现在我得到一个以10为基数的输入,然后计算位运算符,这至少是2次转换和一次运算,然后是一些比较,然后是以10为基数的输出。现在,以非常大的数字作为输入,我的代码无法在合理的时间内回答。您所说的从10进制输入到二进制输入的转换是在输入时立即完成的。只要您输入255,它就会转换为11111111,以便能够存储在内存中。然而,更重要的是,这并不是你真正需要关心的事情。我理解您希望编写快速代码,但这种“优化”是徒劳的,在您分析并确定瓶颈之前,所有优化都是徒劳的。我向你保证,这不会成为你代码的瓶颈。好吧,这很尴尬,我应该想到这一点。。(但我猜为什么我的代码太慢了。希望有点**)