【发布时间】:2014-04-28 11:58:04
【问题描述】:
正如我所注意到的,一方面,Python 中有位运算符,例如:8 ^ 10 结果为 2,这很好。
另一方面,有一些方法可以将基数为 10 的整数转换为二进制数,例如bin(2)
我想知道我是否可以将这两者结合起来,我的意思是字符串上没有按位运算符,因此,bin(8) ^ bin(10) 只会引发错误。我猜想在整数上使用位运算符时,Python 的第一步始终是转换。
实际上,当 a 和 b 都是整数的高值并且对它们进行许多按位运算时,我正在考虑如何加快 a ^ b 之类的运算。转换需要太多时间,所以我想首先转换它们,然后才使用位运算符进行操作。
也许将每个数字转换为布尔列表可能会有所帮助,但如果有人有更好的主意,我很感兴趣。
非常感谢您的任何好的建议!
【问题讨论】:
-
当计算机本身以二进制格式将它们存储在内存中时,为什么要转换这些值?
bin(x)不将x从十进制转换为二进制,它只返回一个0s和1s的字符串来显示你的二进制表示x. -
值得注意的是,
bin()实际上并没有将整数转换为“二进制数”,而是将整数转换为包含数字的二进制表示的字符串。 -
试试
type(bin(x))它只是返回str。所以它是字符串。 -
就像我上面所说的,我想避免任何不必要的转换。因此,按位运算符仅适用于(10 个基数)整数和布尔值(据我所知),但以二进制计算,然后返回到 10 个基数整数,这似乎有点太多了。现在我得到一个以 10 为底的输入,然后评估按位运算符,即至少 2 次转换和一个操作,然后进行一些比较,然后以 10 为底输出。现在,输入非常大的数字,我的代码赢了没有在合理的时间内回答。
-
您所说的从 10 进制输入到二进制的转换是在输入时立即完成的。只要您输入 255,它就会转换为 11111111 以便能够存储在内存中。然而,更重要的是,这从来都不是你需要关心的事情。我很欣赏您想编写快速代码,但这种“优化”是徒劳的,所有优化都是如此,直到您分析和识别瓶颈。我向你保证,这不会成为你代码的瓶颈。
标签: python binary bitwise-operators