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