分享

Python 位操作符(Bitwise)

 软件测试test 2020-12-08



什么是Python中的按位运算符?


按位运算符用于对二进制模式(1和0)执行操作。当您在屏幕上执行2 + 3的整数运算时,计算机将以二进制形式读取它-2表示为10,而3表示为11以二进制格式。因此,您的计算将看起来像10 + 11 = 101

按位运算符乍一看可能令人生畏,因为它们将所有内容都转换为位,并且我们不习惯于1和0。但是,一旦您了解了它们,就可以很容易地对其进行操作。接下来,让我们看一个例子

3 x 2 = 6如果您以二进制格式执行相同的操作

011 x 10 = 110

如果您注意到,当我们将某物乘以2时,我们只需要向左移动一个。因此,011将变为110。

同样,0010将变为0100。现在您知道了,您能看到乘以2有多么容易吗?如果我们除以2,会有任何猜测吗?好吧,你猜对了,而不是左移,我们将有右移。因此,使对位进行这些操作的运算符称为按位运算符。随后,我们将在本教程的后半部分详细了解这些左移和右移。

在继续进行之前,让我们找出为什么按位运算符必不可少的原因。此外,我们还将理解为什么我们需要学习它们。

按位运算符的重要性

现在,您会想知道是否需要进行按位运算。到目前为止,算术运算运行良好。促使您使用按位运算符的一些原因是:

执行速度:到目前为止,我们已经知道,计算机(准确地说是编译器)会将所有内容更改为1和0。那么,为什么不减轻系统负担呢?由于我们现在拥有高级处理器,因此您将不会在常规操作中看到这种差异。但是,如果您正在处理嵌入式系统程序,这将变得很重要。

操作位:很多时候,在嵌入式系统上工作时,您需要操作某些位。

例如,在序列111011中,如果您想知道具有0的位,则可以使用按位运算符(我们将在稍后介绍如何实现)进行操作。

错误检查:在错误检查中广泛使用按位运算符。如果将某些位发送到另一台服务器上的另一台计算机,则容易出错。随后,您可以使用按位运算符识别它们。这对于嵌入式系统很重要,而python是最重要的选择之一。

到现在为止,您已经对我们为什么需要按位运算符有了很好的了解。随后,让我们继续逐位运算符的类型。

不同的Python按位运算符

Python提供了一些有用的运算符来执行按位运算。随后,让我们详细了解这些。

Python中的 AND按位运算符

&(AND)运算符用于执行两位之间的AND。此外,AND的简单规则是,如果所考虑的两个位均为1,则答案为1,否则为0。

1&1 = 1

1&0 = 0

0&0 = 0

0&1 = 0

现在,您可以尝试11和01吗?希望您得到的答案是01。

此外,我们在前面讨论了如何查找哪个位的值为0。这是使用AND操作完成的。

如果您将一个数字与11111111(现在为1个字节)进行与运算,如果结果位为0,则该位置会发生错误。

在下面的计算中,我们在Python中使用&按位运算符对100和101进行运算。您已经知道代表一个二进制数,我们给它加上0b前缀。

因此,您可以直接在编辑器(本机或云)中编写以下语句,然后运行以获取输出。如果您熟悉本机IDE,则可以下载PyCharm,否则也可以使用基于云的编辑器Repl。随后,在本文中,我们将使用Rep.it

在编辑器中执行以下代码:

打印(0b100&0b101)

注意:100是二进制格式的4,而101是5。此外,前缀0b表示我们引用的是二进制值,而不是十进制的100和101。

正如预期的那样,我们得到的结果为4。您必须注意,即使我们以二进制形式执行计算,结果仍然以十进制表示。此外,这是编程语言中的默认行为。此外,如果没有显式引用关键字,结果将以十进制表示。

正如我们引用0b表示输入中的二进制一样,要获取二进制输出,我们需要提及“ bin ”关键字。

随后,执行以下命令以获取相同的二进制结果:

打印(bin(0b100&0b101))

这将带来以下结果:

更多示例:

12和14 = 1100和1110 = 1100 = 12

23&15 = 10111&01111 = 00111 = 7

10&12 = 1010&1100 = 1000 = 8

 OR  Python中的按位运算符

| (OR)运算符用于对两位执行“或”运算。此外,OR的简单规则是,当且仅当所考虑的两个位均为0时,结果位才为0,否则结果为1

1 | 1 = 1

1 | 0 = 1

0 | 1 = 1

0 | 0 = 0

在下面的示例中,我们将数字5(101)与4(100)进行运算,并期望答案为101(5),它只是具有0的中间位。

不出所料,答案5 | 4是5。

更多示例:

12 | 14 = 1100 | 1110 = 1110 = 14

23 | 15 = 10111 | 01111 = 11111 = 31

10 | 12 = 1010 | 1100 = 1110 = 14

NOTPython按位运算符

〜(NOT)运算符是一个非常简单的运算符,其作用与名称相同。此外,它将位从0翻转为1,从1翻转为0。但是在像Python这样的编程中使用时,此运算符用于返回number的补码

因此,〜10 = -11而不是01。此外,必须具有1的补码和2的补码的先验知识,才能在这里理解此运算符的作用。

要理解这个概念,您应该知道python返回数字的2的补码。该数字的2的补数是〜(num + 1)。

因此,〜10返回为〜(10 +1)。这就是您所需要知道的。只要记住快捷方式〜(num + 1)

在编辑器中执行以下代码,以验证输出未进行24(11000)操作

打印(不是(0b11000))

答案是预期的-25。

更多示例:

〜13(0b01101)= -14

〜16(0b010000)= -17

〜31(0b011111)= -32

XOR Python按位运算符

^(XOR)运算符用于对两个正在运算的位进行XOR。XOR操作非常简单。如果两个位相同,则结果位为0,否则为1

1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0

因此1010 ^ 1011将产生0001。

下面通过执行以下几行来演示相同的内容:

打印(0b1010 ^ 0b1011)

XOR运算符在计算机科学和嵌入式系统领域中非常有用。它在逻辑计算中被广泛使用,以使过程更快。例如,如您在上面看到的,对它们执行XOR时10和11的结果为1。因此,如果我想找出两个数字是否连续,可以对它们进行异或运算,然后检查结果是否为1。

更多示例:

12 ^ 14 = 1100 ^ 1110 = 0010 = 2

23 ^ 15 = 10111 ^ 01111 = 11000 = 24

10 ^ 12 = 1010 ^ 1100 = 0110 = 6

Python左移

顾名思义,<< <<(按位向左移位)运算符将位向左移动至该运算符右侧表示的数字。

例如,1 << 2将向左移动1以获得2个值。按位表示,它将显示如下:

1 = 0001。

1 << 2: 0001 << 2 = 0100即4。

执行下面给出的代码,以在结果中看到相同的结果:

打印(0b0001 << 2)

如预期的那样,1 << 2的答案是4。

更多示例:

14 << 1 = 01110 << 1 = 11100 = 28

24 << 4 = 000011000 << 4 = 110000000 = 384

19 << 3 = 00010011 << 3 = 10011000 = 152

到现在为止,您将已经知道,当在编辑器中表示二进制数字时,在执行上述代码之前,需要将前缀0b前缀。

Python右移

顾名思义,>>(右移)运算符会将位向右移至表示在运算符右侧的数字。

例如,10 >> 2将使位(1010)向右移动2。

10 = 1010

10 >> 2:1010 >> 2 = 0010 = 2

让我们通过执行以下几行来确认相同的内容:

打印(0b1010 >> 2)

不出所料,答案是10 >> 2是2。

更多示例:

14 >> 1 = 01110 >> 1 = 00111 = 7

24 >> 4 = 000011000 >> 4 = 00001 = 1

19 >> 3 = 00010011 >> 3 = 000010 = 2

这使我们结束了学习Python或与此相关的任何编程语言的按位运算符的过程。按位运算符的关键只是不知道它们的定义,而是能够在您的程序中实现它们。为了提高按位运算符的效率,请使用位操作进行大量练习,并探讨它们在不同情况下的行为。一旦掌握了这些操作员,它们便是解决问题的最好,最快的方法。

对于您的实践,我已经提到了使用本文中讨论的运算符进行的一些操作。这些操作数尚未写入位,因为对其进行探索将有助于您掌握概念。

执行以下操作并分析,探索和观察结果。

35和27

-23 | 23

18 >> 5

-43 << 3

17 ^ 42

关键要点:

  • 按位运算符是使用诸如Python之类的编程语言在位级别上运行的运算符。

  • 此外,按位运算符在嵌入式系统,网络基础结构和编程中得到了广泛的应用。

  • 此外,按位运算符提供更快,节省空间和错误检查方法。

  • python中使用的按位运算符为:

  • AND运算符。

  • OR运算符。

  • NOT运算符。

  • XOR运算符。

  • 左移运算符。

  • 右移运算符。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多