1. 位运算符
操作符 | 描述 |
---|---|
~ | 按位取反 |
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
<< | 左移 |
>> | 右移 |
## 按位取反,0 变为 1,1 变为 0
~ 1 = 0
~ 0 = 1
## 按位与,只有两个对应位都为 1 时才为 1
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
## 按位或,只要两个对应位中有一个 1 时就为 1
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
##按位异或,只有两个对应位不同时才为 1
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
## << | 左移,num << i 将num的二进制表示向左移动i位所得的值
00 00 10 11 -> 11
11 << 3
---
01 01 10 00 -> 88
## >> | 右移,num >> i 将num的二进制表示向右移动i位所得的值
00 00 10 11 -> 11
11 >> 2
---
00 00 00 10 -> 2
2. 实例
- 通过
<<,>>
快速计算2的倍数问题
n << 1 -> 计算 n*2
n >> 1 -> 计算 n/2,负奇数的运算不可用
n << m -> 计算 n*(2^m),即乘以 2 的 m 次方
n >> m -> 计算 n/(2^m),即除以 2 的 m 次方
1 << n -> 2^n
- 通过
^
快速交换两个整数。
- 通过
a & (-a)
快速获取a
的最后为1
位置的整数
## 例一
00 00 01 01 -> 5
&
11 11 10 11 -> -5
---
00 00 00 01 -> 1
## 例二
00 00 11 10 -> 14
&
11 11 00 10 -> -14
---
00 00 00 10 -> 2
3. 练习题
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。尝试使用位运算解决此题。
3. 问答
-
怎样对python中的代码进行注释?
##
:单行注释;''' '''
:多行注释 -
python有哪些运算符,这些运算符的优先级是怎样的?
算术运算符、比较运算符、逻辑运算符,位运算符,三元运算符和其他运算符
-
python 中 is, is not 与 ==, != 的区别是什么?
is, is not 对比的是两个变量的内存地址,==, != 对比的是两个变量的值
-
python 中包含哪些数据类型?这些数据类型之间如何转换?
整型,浮点型,布尔型;转换为整型
int(x, base=10)
,转换为字符串str(object='')
,转换为浮点型float(x)
4. 总结
因为自己有一定的基础,此次参加组队任务的主要目标为查缺补漏,所以只记录之前还不懂或者不熟悉的知识点。之前对位运算一直都只知皮毛,不识全体,趁此机会,狠狠恶补了相关知识。
参考文献:变量、运算符与数据类型,位运算.