在Python中使用按位运算而不是布尔运算有什么好处?

时间:2013-07-10 07:05:31

标签: python bit-manipulation low-level high-level

我无法理解为什么我想在Python等高级语言中使用按位运算符。从我学到的高级语言和低级语言来看,高级语言的设计通常是为了让您不必过多担心计算机中的机器代码。虽然我绝对不是专业程序员,但我并不认为在一种语言中逐位操作程序,据我所知,这种语言旨在避免它。

当然,这是假设我正确理解高级和低级语言的区别。

我想在发布之前澄清一下,我明白了什么是按位操作。我在这里发现了很多问题,只是解释了按位操作是什么和/或指向解释操作的问题。我只是很难理解为什么有人会在Python中使用它而不是其他更容易(在我的新手看来)的错误修复解决方案。

TL;博士 或者,当不能使用更简单的布尔逻辑时,使用按位运算的代码的一些示例是什么?

3 个答案:

答案 0 :(得分:3)

如果您想在标准库中使用按位运算符的具体示例,请查看re库。 According to the API,这些标志应该按位OR组合在一起。

这允许您在单个参数中传递大量选项。请考虑以下选项:

re.compile(expression,re.I | re.M | re.X)

VS

re.compile(expression,ignorecase=True,multiline=True,verbose=True)

我认为我们可以同意第一个版本至少更紧凑。


你可能会想“嗯,我更喜欢第二个 - 毕竟,它更明确!” ......你可能有一个案例。但是,如果你有一个同事在C中生成一个二进制文件并且他告诉你文件的头部包含一个32位整数字段并且该整数字段存储解码文件其余部分所需的标志怎么办?作为一个合理的人,您希望以高级语言使用该文件,您可以轻松高效地操作数据,以便选择python。现在我打赌你很高兴你可以做按位操作,以免你需要使用C来解码/分析你的文件。

答案 1 :(得分:3)

Python中的按位运算肯定有用。除了or - 标志,就像mgilson提到的那样,我自己用它来组成CAN消息的包头。通常,较低级别消息协议的标头由长度不是8位的倍数的字段组成,因此如果您只想更改一个字段,则需要按位运算符。

Python是一种更高级别的语言并不意味着你不能用它做低级的东西!

答案 2 :(得分:0)

几乎所有使用传输协议的东西都会在某个时刻使用逐位运算 - 一组全部为真或者的标志通常会组合成一个字节,最多可以有8个标志,以节省带宽,而且不会有解码它的255个值的字典 - 不要笑我在一个案例中看到它用多种语言完成,其中包含大量的if else语句 - 最多只需要一些按位操作就可以了。