【发布时间】:2016-04-18 07:26:42
【问题描述】:
在一个问题中,我应该处理以二进制形式给出的长输入。喜欢
"1000101011111101010100100101010101010101"
我需要在这个问题中使用按位运算符 OR |。我研究了这个运算符的使用,它似乎适用于常规整数而不是二进制。所以我打电话给int(thing, 2)。之后,我使用按位运算符。然而有些事情让我很困扰。 python解释器不是再次将其更改回二进制以对其应用按位或吗?所以这不是重复步骤吗?
没有其他方法可以直接使用这个字符串,也许对所有字母进行迭代是更好的方法?还有另一个关于整数精度的问题。因为有时输入大于 500 个字符,所以我无法将其存储为整数。
我试过这样的事情,想象一下a 和b 是两个二进制字符串。
for comparison in zip(a, b):
if any(comparison):
# Do stuff if OR gives 1
事实证明这确实非常慢。请赐教。
提前致谢。
【问题讨论】:
-
没有像“回到二进制”这样的步骤。整数(和所有数字)已经以二进制形式存储。所以答案是否定的,没有执行额外的步骤。
-
确实非常简单。但是,不直接使用字符串(如果存在方法)应该更快吗?
-
否,因为 CPU 有专门的运算符用于数字的按位运算。
-
那么我应该尽可能地喜欢按位运算吗?因为它比整数运算快?
-
注意:“二进制字符串”可能有不同的含义(不是“01”字符串)。相关:Convert a text string to bits and back、Fastest Bitwise XOR on Data Buffers。
标签: python python-2.7 integer bit-manipulation time-complexity