Python 二进制数和逻辑运算符

我们之前看过简单的数字和操作。在本文中,你将了解数字在计算机内部的工作方式以及与之相配的一些魔力。

在本文中,你将学习如何在 Python 中使用二进制数,如何将它们转换为小数以及如何对它们进行按位运算。

二进制数

在计算机信号处理最底层,除了“有信号”或“这些不是信号”之外,计算机没有任何数字概念。你可以将其视为一个灯开关:开关打开或关闭。

这些微小的信息,即你可以存储在计算机中的最小信息量,被称为一个比特 bit。我们将其表示为低-0 或高-1

为了表示高于 1 的数字的想法诞生于使用比特序列。8 位序列可以存储更大的数字,这称为字节 - byte 。由 10 组成的序列称为二进制。我们传统的十位数计数系统称为十进制。

![带二进制表示的十进制数](/img/Tutorial/Python/binary number.webp)

让我们看看实际中的程序:

print int('01', 2)
print int('10', 2)
print int('11', 2)

第二个参数 2 告诉 Python 我们有一个基于二进制(1 和 0)的数字。要将字节(8 位)转换为十进制,只需在第一个参数中写入 8 位的组合。

print int('00000011', 2)   # outputs 3
print int('00010001', 2)   # outputs 17
print int('11111111', 2)   # outputs 255

电脑是如何做到这一点的?每个数字(从右到左)乘以 2 的幂。

数字'000 1 000 1 ‘是(1 x 2 ^ 0)+(0 x 2 ^ 1)+(0 x 2 ^ 2)+(0 x 2 ^ 3)+(1 x 2 ^ 4)+(0 x 2 ^ 5)+(0 x 2 ^ 6)+(0 x 2 ^ 7)= 16 + 1 = 17。记住,从右到左阅读。

数字'00110010’将是(0 x 2 ^ 0)+(1 x 2 ^ 1)+(0 x 2 ^ 2)+(0 x 2 ^ 3)+(1 x 2 ^ 4)+(1 x 2 ^ 5)+(0×2 ^ 6)+(0×2 ^ 7)= 32 + 16 + 2 = 50。

自己尝试序列'00101010’,看看你是否理解并验证了 Python 程序。

二进制数的逻辑运算

二进制左移和二进制右移

乘以因子 2 并除以因子 2 在二进制中非常容易。我们只需向左或向右移动位。我们向下移动:

第 4 位 第 3 位 第 2 位 第 1 位
0 1 0 1
1 0 1 0

在移位 0101 之前,我们得到数字 5。在移位 1010 后,我们得到数字 10。在 python 中,你可以使用按位左移运算符 << 来左移,按位右移运算符 >> 来向右移位。

inputA = int('0101',2)
 
print "Before shifting " + str(inputA) + " " + bin(inputA)
print "After shifting in binary: " + bin(inputA << 1)
print "After shifting in decimal: " + str(inputA << 1)

输出:

Before shifting 5 0b101
After shifting in binary: 0b1010
After shifting in decimal: 10

Python 逻辑与运算符

给定两个输入,计算机可以使用这些位执行多个逻辑运算。我们来看看逻辑与 AND 运算符。如果输入 A 和输入 B 为正,则输出为正。我们将以图形方式演示 AND 运算符,左边的两个是输入 A 和输入 B,右边的圆是输出:

![按位与](/img/Tutorial/Python/bitwise AND.webp)

在代码中,使用 符号,它表示逻辑与运算符。

inputB = 1
print inputA & inputB   # Bitwise AND

通过更改输入,你将获得与上图相同的结果。我们可以对序列执行 AND 运算符:

inputA = int('00100011',2)   # define binary sequence inputA
inputB = int('00101101',2)   # define binary sequence inputB
 
print bin(inputA & inputB)   # logical AND on inputA and inputB and output in binary

输出:

0b100001   # equals 00100001

这是有道理的,因为如果你手动执行操作:

00100011
00101101
--------   Logical bitwise AND
00100001

Python 逻辑或运算符

既然你已经学习了逻辑与运算符,那么让我们看一下逻辑或 OR 运算符。给定两个输入,仅当 AB 都为零时,输出才为零。

![按位或](/img/Tutorial/Python/bitwise OR.webp)

要执行它,我们使用 | 运算符。举例如下,

inputA = int('00100011',2)  # define binary number
inputB = int('00101101',2)  # define binary number
 
print bin(inputA)            # prints inputA in binary
print bin(inputB)            # prints inputB in binary
print bin(inputA | inputB)   # Execute bitwise logical OR and print result in binary

输出:

0b100011
0b101101
0b101111

XOR 运算符

这是一个有趣的运算符:异或或短期异或。

![按位异或](/img/Tutorial/Python/bitwise XOR.webp)

要执行它,我们使用 ^ 运算符。举例如下,

inputA = int('00100011',2)  # define binary number
inputB = int('00101101',2)  # define binary number
 
print bin(inputA)            # prints inputA in binary
print bin(inputB)            # prints inputB in binary
print bin(inputA ^ inputB)   # Execute bitwise logical OR and print result in binary

输出:

0b100011
0b101101
0b1110