数字日期和时间02-二八十六进制整数 / 字节与整数的转换 / 复数的运算

二八十六进制整数

(一)、十进制转其他进制

  • 使用 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)

猜你喜欢

转载自blog.csdn.net/xiangchi7/article/details/82501255