Skip to content

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的按位与、按位或、按位异或的值。

正数:

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

负数:

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

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

3    [0000 0011]
5    [0000 0101]
-3   [1111 1101]
-5   [1111 1011]

求值:

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

                按位与             按位或             按位异或    
数值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]

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

                按位与             按位或             按位异或    
数值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:

                按位与               按位或               按位异或    
数值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执行命令验证:

python
# 按位与:
>>> 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个数的补码,如下:

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

3    [0000 0011]
5    [0000 0101]
-3   [1111 1101]
-5   [1111 1011]

按位反转后的补码:

3    [1111 1100]
5    [1111 1010]
-3   [0000 0010]
-5   [0000 0100]

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

3    [1000 0011]
5    [1000 0101]
-3   [0000 0010]
-5   [0000 0100]

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

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

使用python执行命令验证:

python
>>> ~3
-4
>>> ~5
-6
>>> ~-3
2
>>> ~-5
4

本首页参考 https://notes.fe-mm.com/ 配置而成