Featured image of post Python的运算符

Python的运算符

Python的运算符

常用运算符

常用运算符详细介绍见下表:

运算符名称说明示例
+两个对象相加>>> 1+2 结果为 3 >>> 'ab'+'cd'结果为 ‘abcd’
-两个对象相减>>> 2-1 结果为 1 >>> 1-2 结果为 -1
*两个数相乘或重复字符>>> 3\*4 结果为 12 >>> "-"*6 结果为 ‘——’
**x**y 返回x的y次幂>>> 3**4 结果为 81 , 同pow(3,4) = 81
/除以x/y x除以y>>> 4/2 结果为 2.0 >>> 4.0/2 结果为 2.0
//取整除返回商的整数部分>>> 4//2结果为2 >>> 4//3结果为1 >>> 4//3.0结果为1.0 >>> 4//2.0结果为2.0
%取模返回除法的余数»> 4%2.0结果为0.0 »> 4%3.0结果为1.0 »> 4%3结果为1 »> 4%2结果为0
«左移x<<y 把x的二进制数值左移y位>>> 2<<1结果为4 >>> 2<<2结果为8
»右移x»y 把x的二进制数值右移y位>>> 16>>1结果为8 >>> 16>>2结果为4 >>> 16>>3结果为2 >>> 16>>4结果为1
&按位与数的按位与(同时为1则为1,否则为0)
^按位异或数的按位异或(异则为1,同则为0)
~按位翻转x的按位翻转为-(x+1)

运算符有优先级,但建议使用圆括号来分组运算符和操作数,使程序尽可能的易读。

按位与、按位或、按位异或、按位翻转

下面详细介绍按位与、按位或、按位异或、按位翻转的求值过程。

分别求3与5,3与-5,-3与5,-3与-5的按位与、按位或、按位异或的值。

正数:

1
2
3的原码 = 反码 = 补码     [0000 0011]
5的原码 = 反码 = 补码     [0000 0101]

负数:

1
2
3
4
5
6
7
8
9
原码:
    -3的原码    [1000 0011]
    -5的原码    [1000 0101]
反码:原码符号位不变,其余各位取反
    -3的反码    [1111 1100]
    -5的反码    [1111 1010]
补码:原码符号位不变,其余各位取反,再加1(即原码的反码+1)
    -3的补码    [1111 1101]
    -5的补码    [1111 1011]

将补码放在一起,便于观察:

1
2
3
4
3    [0000 0011]
5    [0000 0101]
-3   [1111 1101]
-5   [1111 1011]

求值:

使用补码进行运算,最后结果还是补码:

1
2
3
4
5
                按位与             按位或             按位异或    
数值3与5        [0000 0001]        [0000 0111]        [0000 0110]
数值3与-5       [0000 0011]        [1111 1011]        [1111 1000]
数值-3与5       [0000 0101]        [1111 1101]        [1111 1000]
数值-3与-5      [1111 1001]        [1111 1111]        [0000 0110]

再根据补码求原码,先求反码,正数不变,负数符号位不变,其他取反:

1
2
3
4
5
                按位与             按位或             按位异或    
数值3与5        [0000 0001]        [0000 0111]        [0000 0110]
数值3与-5       [0000 0011]        [1000 0100]        [1000 0111]
数值-3与5       [0000 0101]        [1000 0010]        [1000 0111]
数值-3与-5      [1000 0110]        [1000 0000]        [0111 1001]

再根据补码求原码,正数不变,负数再+1:

1
2
3
4
5
                按位与               按位或               按位异或    
数值3与5        [0000 0001]=1        [0000 0111]=7        [0000 0110]=6  对
数值3与-5       [0000 0011]=3        [1000 0101]=-5       [1000 1000]=-8 对
数值-3与5       [0000 0101]=5        [1000 0011]=-3       [1000 1000]=-8 对
数值-3与-5      [1000 0111]=-7       [1000 0001]=-1       [0000 0110]=6  对

使用python执行命令验证:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
## 按位与:
>>> 3&5
1
>>> 3&-5
3
>>> -3&5
5
>>> -3&-5
-7
    
## 按位或:
>>> 3|5
7
>>> 3|-5
-5
>>> -3|5
-3
>>> -3|-5
-1
    
## 按位异或:
>>> 3^5
6
>>> 3^-5
-8
>>> -3^5
-8
>>> -3^-5
6

下面对3,5,-3,-5求按位翻转的值。

刚刚已经获取了4个数的补码,如下:

将补码放在一起,便于观察:

1
2
3
4
3    [0000 0011]
5    [0000 0101]
-3   [1111 1101]
-5   [1111 1011]

按位反转后的补码:

1
2
3
4
3    [1111 1100]
5    [1111 1010]
-3   [0000 0010]
-5   [0000 0100]

求补码的反码,正数不变,负数符号位不变,其他位取反:

1
2
3
4
3    [1000 0011]
5    [1000 0101]
-3   [0000 0010]
-5   [0000 0100]

求补码的原码,正数不变,负数符号位不变,+1::

1
2
3
4
3    [1000 0100]=-4  对
5    [1000 0110]=-6  对
-3   [0000 0010]=2   对
-5   [0000 0100]=4   对

使用python执行命令验证:

1
2
3
4
5
6
7
8
>>> ~3
-4
>>> ~5
-6
>>> ~-3
2
>>> ~-5
4
Licensed under the GNU General Public License v3.0