单行注释:#
操作符 | 名称 | 示例 |
+ | 加 | 1+1 |
- | 减 | 2-1 |
* | 乘 | 3*4 |
/ | 除 | 3/4 |
// | 整除 | 3//4 |
% | 取余 | 3%4 |
** | 幂 | 2**3 |
比较运算符 | ||
---|---|---|
操作符 | 名称 | 示例 |
> |
大于 | 2 > 1 |
>= |
大于等于 | 2 >= 4 |
< |
小于 | 1 < 2 |
<= |
小于等于 | 5 <= 2 |
== |
等于 | 3 == 4 |
!= |
不等于 | 3 != 5 |
逻辑运算符 | ||
---|---|---|
操作符 | 名称 | 示例 |
and |
与 | (3 > 2) and (3 < 5) |
or |
或 | (1 > 3) or (9 < 2) |
not |
非 | not (2 > 1) |
位运算符 | ||
---|---|---|
操作符 | 名称 | 示例 |
~ |
按位取反 | ~4 |
& |
按位与 | 4 & 5 |
| |
按位或 | 4 | 5 |
^ |
按位异或 | 4 ^ 5 |
<< |
左移 | 4 << 2 |
>> |
右移 | 4 >> 2 |
其他运算符 | ||
---|---|---|
操作符 | 名称 | 示例 |
in |
存在 | ‘A‘ in [‘A‘, ‘B‘, ‘C‘] |
not in |
不存在 | ‘h‘ not in [‘A‘, ‘B‘, ‘C‘] |
is |
是 | "hello" is "hello" |
is not |
不是 | "hello" is not "hello" |
3 ** -2
等价于3 ** (-2)
。1 << 3 + 2 & 7
等价于 (1 << (3 + 2)) & 7
。3 < 4 and 4 < 5
等价于(3 < 4) and (4 < 5)
。 类型 | 名称 | 示例 |
---|---|---|
int | 整型 <class ‘int‘> |
-876, 10 |
float | 浮点型<class ‘float‘> |
3.149, 11.11 |
bool | 布尔型<class ‘bool‘> |
True, False |
1 a = 1031 2 print(a, type(a)) 3 # 1031 <class ‘int‘>
int(x, base=10)
str(object=‘‘)
float(x)
5.位运算
二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。
原码:就是其二进制表示(注意,最高位是符号位)。
反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。
补码:正数的补码就是原码,负数的补码是反码+1。
符号位:最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算。
按位非操作 ~ |
~ 把num 的补码中的 0 和 1 全部取反(0 变为 1,1 变为 0)有符号整数的符号位在 ~ 运算中同样会取反。 |
按位与操作 & |
只有两个对应位都为 1 时才为 1 |
按位或操作 | |
只要两个对应位中有一个 1 时就为 1 |
按位异或操作 ^ |
只有两个对应位不同时才为 1、异或操作的性质:满足交换律和结合律 |
按位左移操作 << |
num << i 将num 的二进制表示向左移动i 位所得的值。 |
按位右移操作 >> |
num >> i 将num 的二进制表示向右移动i 位所得的值。 |
bin
一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号,巨坑。0xffffffff
进行按位与操作,再交给bin()
进行输出,得到的才是负数的补码表示。leetcode 习题 136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
尝试使用位运算解决此题。
""" Input file example1: [2,2,1] example2: [4,1,2,1,2] Output file result1: 1 result2: 4 """ class Solution: def singleNumber(self, nums: List[int]) -> int: # your code here
def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ c = 0 for x in nums: c ^= x print(c) l1 = [1, 2, 2] l2 = [4, 1, 2, 1, 2] s = Solution() s.singleNumber(l1) # 1 s.singleNumber(l2) # 4
只需将数组里面的整数一起按位异或即可。
原文:https://www.cnblogs.com/titaniumwu/p/13363494.html