python3xiaobaike_2020/chapter2/2-16 python3小白课:位运算符.md
2025-04-20 23:22:14 +08:00

43 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课位运算符
位运算符是用来直接处理数字的原始bit位是把数字看作二进制来进行计算的。常用在图形、图像处理文本加解密等领域。
> [!tip]
>
> 但在日常常见的编程中,实话说比较罕见,而且掌握起来也有一定的难度,掌握后如果不经常使用也容易忘。因此如果你没有对它的日常需要,可以不进行它的掌握,直接跳过本节即可。感兴趣的同学可以自行查阅网上的资料深入学习。
我们来看点简单的例子:
假如 a 为 60b 为 13。则二进制格式为
`a = 0011 1100`
`b = 0000 1101`
我们有如下的运算符可供选择:
| 运算符 | 描述 | 实例 |
| :----- | :----------------------------------------------------------- | :-------------------------------------------- |
| & | 按位与运算符参与运算的两个值如果两个相应位都为1则该位的结果为1否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | | 按位或运算符只要对应的两个二进位有一个为1时结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
| ^ | 按位异或运算符当两对应的二进位相异时结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
| ~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。**~x** 类似于 **-x-1** | (~a ) 输出结果 -61 ,二进制解释: 1100 0011 |
| << | 左移动运算符:运算数的各二进位全部左移若干位,由 **<<** 右边的数字指定了移动的位数高位丢弃低位补0。 | a << 2 输出结果 240 二进制解释 1111 0000 |
| >> | 右移动运算符:把**>>**左边的运算数的各二进位全部右移若干位,**>>** 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
我们来看一下验证的代码:
```python
# coding:utf-8
a = 0b00111100 # 即a = 60
b = 0b00001101 # 即b = 13
print(a, b)
print(a & b)
print(a | b)
print(a ^ b)
print(~a)
print(a << 2)
print(a >> 2)
```