布尔运算
运算(按优先级升序排列) | 结果 |
---|---|
x or y | if x is false, then y, else x |
x and y | if x is false, then x, else y |
not x | if x is false, then True, else False |
数字类型
运算 | 结果 |
---|---|
divmod(x, y) | (x // y, x % y) |
pow(x, y)或x ** y | x 的 y 次幂 |
math.trunc(x) | x 截断为 Integral |
round(x[, n]) | x 舍入到 n 位小数,半数值会舍入到偶数。 如果省略 n,则默认为 0。 |
math.floor(x) | <= x 的最大 Integral |
math.ceil(x) | >= x 的最小 Integral |
整数类型的按位运算
运算(以优先级升序排序) | 结果 |
---|---|
x | y | x 和 y 按位 或 \ |
x ^ y | x 和 y 按位 异或 |
x & y | x 和 y 按位 与 |
x << n | x 左移 n 位 |
~x | x 逐位取反 |
~3 的计算步骤
转二进制:0 11
计算补码:0 11
按位取反:1 00
转为原码
按位取反:0 11
末位加一:0 100
符号位为1是负数,即-4
~-3 的计算步骤
转二进制:1 11
计算补码:1 01
按位取反:0 10
转为原码
按位取反:0 01
末位加一:0 10
符号位为1是负数,即-2
原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
例如,用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
import math
print('# 布尔运算')
print(2 or 3) # 2
print(2 and 3) # 3
print(not 3) # False
print('# 数字类型')
print(divmod(3, 2)) # (1, 1)
print(pow(2, 3)) # 8
print(2**3) # 8
print(math.trunc(1.678)) # 1
print(round(12.456, 2)) # 12.46
print(math.floor(-2.3)) # -3
print(math.ceil(3.213)) # 4
print('# 整数类型的按位运算')
print(bin(2), bin(3))
print(2 | 3) # 3
print(2 ^ 3) # 1
print(2 & 3) # 2
print(3 << 1) # 6
print(3 >> 1) # 1
print(~3) # -4
print(~-3) # 2
print('# 整数类型的附加方法')
n = 3
print(bin(3)) # 0b11
print(n.bit_length()) # 2
print('# 浮点类型的附加方法')
print((1.23).as_integer_ratio()) # (2769713770832855, 2251799813685248) 返回一对整数,其比率正好等于原浮点数并且分母为正数。 无穷大会引发 OverflowError 而 NaN 则会引发 ValueError
print((-2.0).is_integer()) # True
print((1.1).is_integer()) # False