Python 二进制数和逻辑运算符
我们之前看过简单的数字和操作。在本文中,你将了解数字在计算机内部的工作方式以及与之相配的一些魔力。
在本文中,你将学习如何在 Python 中使用二进制数,如何将它们转换为小数以及如何对它们进行按位运算。
二进制数
在计算机信号处理最底层,除了“有信号”或“这些不是信号”之外,计算机没有任何数字概念。你可以将其视为一个灯开关:开关打开或关闭。
这些微小的信息,即你可以存储在计算机中的最小信息量,被称为一个比特 bit
。我们将其表示为低-0
或高-1
。
为了表示高于 1
的数字的想法诞生于使用比特序列。8 位序列可以存储更大的数字,这称为字节 - byte
。由 1
和 0
组成的序列称为二进制。我们传统的十位数计数系统称为十进制。
![带二进制表示的十进制数](/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
运算符。给定两个输入,仅当 A
和 B
都为零时,输出才为零。
![按位或](/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