二八十六进制整数
(一)、十进制转其他进制
使用 bin() ,oct() 或 hex() +format() 函将整数转换为二进制、八进制或十六进制
x = 1234
#转为二进制
print(bin(x)) # '0b10011010010'
#转为八进制
print(oct(x)) # '0o2322'
#转为十六进制
print(hex(x)) # '0x4d2'
使用format()
使用format(),不但能转化进制,还能消除上面方法的 0b , 0o 或者 0x 的前缀
x = 1234
#十进制转为二进制
print(format(x,'b')) # 10011010010
#十进制转为八进制
print(format(x,'o')) # 2322
#十进制转为十进制
print(format(x,'x')) # 4d2
#整数是有符号的,所以如果你在处理负数的话,输出结果会包含一个负号
(二)、其他进制转十进制
- 使用 int()
#二进制转十进制
print(int('10011010010', 2)) # 1234
#八进制转十进制
print(int('2322',8)) # 1234
#十六进制转十进制
print(int('4d2', 16)) # 1234
字节与整数的转换
(一)、整数转为字节字符串
- 使用 int.to bytes()
x = 94522842520747284487117727783387188
#转换,并指定字节数和字节顺序
print(x.to_bytes(16, 'big'))
# b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
#转换,并指定字节数和字节顺序
print(x.to_bytes(16, 'little'))
# b'4\x00#\x00\x01\xef\xcd\x00\xab\x90
字节顺序是什么?
字节顺序规则 (little 或 big) 仅仅指定了构建整数时的字节的低位高位排列方式。比如下面 16 进制数的表示中可以很容易的看出来:
x = 0x01020304
print(x.to_bytes(4, 'big')) # b'\x01\x02\x03\x04'
print(x.to_bytes(4, 'little')) # b'\x04\x03\x02\x01'
使用 struct.unpack()
struct 模块也能解压字节。不过利用 struct 模块来解压对于整数的大小是有限制的只能应付小的整数数。此方法,需要解压多个字节串并将结果合并为,就像下面这样:
data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
import struct
A ,B = struct.unpack('>QQ', data)
print((A << 64) + B) # 94522842520747284487117727783387188>
(一)、字节字符串转为整数
使用 int.from bytes()
把一个拥有 128 位长的 16 个元素的字节字符串解析为整数
data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
print(len(data)) # 16
#转换并指定字节顺序为little
print(int.from_bytes(data, 'little')) # 69120565665751139577663547927094891008
#转换并指定字节顺序为big
print(int.from_bytes(data, 'big')) # 94522842520747284487117727783387188
复数的运算
(一)、复数的指定
-使用【j】和【complex(real, imag)】
a = complex(3, 5)
b = 3 - 5j
print(a) # (3+5j)
print(b) # (3-5j)
(二)、获取复数的实部、虚部、共轭复数
a = complex(3, 5) # 即(3+5j)
#复数的实部
print(a.real) # 3.0
#复数的虚部
print(a.imag) # 5.0
#复数的共轭复数
print(a.conjugate()) # (3+5j)
(三)、复数的数学运算
- 直接相加减
a = complex(3, 5)
b = 3 - 5j
print(a + b) # (6+0j)
print(a - b) # 10j
print(a * b) # (34+0j)
print(a / b) # (-0.4705882352941177+0.8823529411764706j)
print(abs(a)) # 5.830951894845301
print(abs(b)) # 5.830951894845301
使用 numpy
Python 中大部分与数学相关的模块都能处理复数。比如如果你使用 numpy ,可以
很容易的构造一个复数数组并在这个数组上执行各种操作
a = complex(3, 5)
b = 3 - 5j
import numpy as np
print(np.array([a]) + np.array([b])) # [6.+0.j]
print(np.array([a]) - np.array([b])) # [0.+10.j]
c = np.array([3+5j,3-5j,2-3j])
print(c+3) # [6.+5.j 6.-5.j 5.-3.j]
(四)、复数的正弦、余弦、平方根
使用 cmath 模块
a = complex(3, 5)
import cmath
#复数的正弦
print(cmath.sin(a)) # (10.472508533940392-73.46062169567367j)
#复数的余弦
print(cmath.cos(a)) # (-73.46729221264526-10.471557674805572j)
#复数的平方根
print(cmath.exp(a)) # (5.697507299833739-19.26050892528742j)