python整数表示和算术库

pirep的Python项目详细描述


python整数表示和算术库

此工具可能对系统软件开发人员(例如,编译器或binutils开发人员)有用。下面是以方便的形式表示整数的函数,以及对任意格式整数进行算术运算的函数。

安装

$ git clone https://github.com/smurphik/pirep
$ cd pirep
$ sudo python3 setup.py install clean

其他方式:

$ sudo pip3 install pirep

格式

几乎所有函数的整数参数都可以是4种格式中的任意一种:

  • decimal-常用的python整数(07-2,…);
  • 十六进制-带或不带前缀'0x''0xf''a7',甚至'-0xcf')或通常的十六进制int(0x30xd,…,但python将其转换为通常的十进制int);
  • binary-前缀为'0b''0b010110''0b0',…)或通常的0b...整数的字符串;
  • float-常用的python float(为什么不呢?0.017.-3.,…)。

可以通过调用psetmode()全局指定算术函数的默认输出格式,也可以通过每个接口的参数fmt本地指定算术函数的默认输出格式。十六进制/二进制输出格式是前缀为'0x'/'0b'的字符串。

表示

c2repr根据当前的有符号性和int宽度(默认为64位有符号),以任何输出格式给出two的补码表示。

>>> from pirep import *

>>> c2repr(5, 'b')
'0b101'

>>> c2repr(-10)
'0xfffffffffffffff6'

>>> c2repr('8000000000000000', 'd')
-9223372036854775808

>>> c2repr('4000000000000000', 'd')
4611686018427387904

举例说明decomp的含义。操作sethi %hi(0x103c00), %o3(请参阅sparc指令集)编码为1700040f。我们可以在它的字段上清楚地扩展代码指令。为此,我们需要知道所有字段的最后位数:

>>> decomp('1700040f', (31, 29, 24, 21))
['00', '01011', '100', '0000000000010000001111']

>>> decomp('1700040f', (31, 29, 24, 21), 'h')
['0x0', '0xb', '0x4', '0x40f']

为什么'0x40f'而不是0x103c00?没关系。sethi只设置22个高位:

# Left shift
>>> psll('0x40f', 10)
'0x103c00'

我们可以按字节分解任何整数:

>>> decomp(3932166)
['00111100', '00000000', '00000110']

更详细的解码方法-对类的对象使用Enc

>>> e = Enc('sethi', (('opc', 31), ('rd', 29), ('opc', 24), ('imm22', 21)))

>>> decode('1700040f', e, borders=True)
 opc     rd    opc           imm22
  00   01011   100   0000000000010000001111
31-30  29-25  24-22  21-------------------0

>>> e.field(('opc', 31)).add_only_true(0)
>>> e.field(('rd', 29)).add_verbose(11, 'eleven')

>>> decode('1700040f', e, 'h')
opc   rd  opc  imm22
0x0  0xb  0x4  0x40f

rd[29:25]:   eleven

有一个单独的模块可以方便地包含您经常使用的所有编码。

算术

您可以通过psetmode()

>>> from pirep import *

# Default mode: signed, 64-bit, hexadecimal default output
>>> pgetmode()
[True, 64, 'h']
>>> psub('0x100', 15)
'0xf1'

# Signed 8-bit int with decimal output by default
>>> psetmode(True, 8, 'd')
>>> psub('0x100', 15.)
-15
>>> psub('0x100', '0b1111', 'b')
'0b11110001'

pirep包含其他几个基本算术函数:

>>> psetmode(True, 8, 'd')
>>> pmul(3, padd(pdiv('f', '0b100'), prem(11, '0x3')))
15
>>> psetbits(15, (3, 5), '0b110')
55
>>> padd(pintmin(), pintmax())
-1

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么我不能从ObjectInputStream读取ArrayList?   linux如何设置java时区?   java是一种拥有系统的方法。出来在循环中打印不同的内容?   scala Apache Spark:在Java中有效地使用mapPartitions   java Maven对com的依赖性。白天利用率   java将多个数据映射到单个id的表的正式名称是什么?   java如何在Android应用程序中隐藏FulterWave API键   SeleniumWebDriverJava:如何使用行号和列号单击表中的特定单元格   java Springbatch将数据从写入程序或处理器传递到RestConroller   java在Android TextView中一次换行两行,并带有跨距   java如何使这个rxjava zip并行运行?   JAVAutil。登录中。记录器不尊重java。util。登录中。数量   java无法将参数发布到服务器   java Eclipse:在自定义透视图/视图的状态行上显示作业进度   java在调用findAll()时,找到了多个具有给定标识符的行,但如果我使用findById()遍历所有条目,则可以工作;   Java中的正则表达式问题   Java中的实例变量   java如何在安卓中逐字搜索   java如何计算百分比