简单固定宽度整数

fixedint的Python项目详细描述


此模块提供固定大小的整数类,这些类在 算术运算。它面向需要模拟机器整数的用户。

它提供了灵活的类,用于定义具有固定位数的整数,以及 作为常用机器整数大小的预定义类。这些类可以用作 替换int/long的下拉列表,并可以切片以提取位字段。

提供了这些整数的可变版本,允许使用模拟 机器寄存器。

基本用法

宽度8、16、32和64的预定义固定宽度整数集合可用 有签名和无签名的品种。提供了每种类型的可变和不可变版本。

它们被命名为[Mutable][U]Int<N>,例如UInt64MutableInt8。使用这些 类,int;涉及这些类的算术操作将保留 固定宽度。例如:

x = UInt32(0)
print(hex(~x)) # prints 0xffffffff

可以就地修改可变实例,保留其类型:

x = MutableUInt32(0)
y = x
x += 100
print(y) # prints 100

要设置可变整数而不丢失其类型,请使用切片:

x = MutableUInt32(0)
x[:] = -1
print(hex(x)) # prints 0xffffffff

算术运算

FixedInt实例支持所有算术运算符。对于二进制运算符 操作数转换为纯pythonint,然后对其进行操作。有几个 异常,结果将被转换回一个足够容纳 操作数,前提是其中一个操作数是FixedInt。注意结果 FixedInt可能不够大,无法保存完整的结果,在这种情况下 结果将被截断。

例外情况如下:

  • divmod返回纯ints的元组
  • 真除法返回浮点值
  • **<<>>如果左操作数是 FixedInt,否则为纯int

可变实例还支持就地操作,这将修改 不改变其类型的值。

c整数提升后两个不同大小整数之间的算术运算 确定最终结果类型时的规则。这些规则归结为 以下内容:

  • 如果两个操作数都有符号或都没有符号,则选择两个操作数类型中较宽的一个。
  • 否则,如果无符号操作数更宽,则选择无符号操作数。
  • 否则,将选择有符号操作数。

切片

FixedInt实例支持切片。使用单个整数进行切片将生成单个 表示该位置的位的布尔值。使用范围进行切片会产生 FixedInt包含位的范围。可变实例还支持slice 任务。这使得操作标志寄存器变得简单,而无需 使用按位运算。

所有索引操作将最低有效位(LSB)处理为位0。目前,仅 可以获得连续的位段;考虑到使用模块的灵活性 例如位数组

获取一个切片会产生一个FixedInt实例,其位正好与范围相同。 这可用于对位字段执行环绕运算。

片支持两种主要语法:

value[<start>:<end>]
value[<start>:<length>j]

后一种语法在处理固定宽度字段时更方便。两个 slice参数可以省略,在这种情况下,它们将默认为的lsb和msb 分别是FixedInt

字节转换

FixedInt实例可以通过使用 .to_bytes实例方法和.from_bytes类方法。这些的用法 方法与python 3.4的int.to_bytesint.from_bytes方法匹配。

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

推荐PyPI第三方库


热门话题
java如何使用数据库中的值填充p:selectOneMenu   Java/Junit中的异步单元测试一个非常简单但不成功的例子   在Debian上使用Java连接到MySQL   java测试时如何恢复表中的一条记录/行?   java如何将重点放在jbutton上而不是放在另一个jbutton上?   java我可以从HPROF文件中获取JVM标志吗?   java如何使用自定义比较器在2个集合上保留   java让stringTokenizer将一行文本拆分为预定义变量的最佳方法是什么   Kotlin Android/Java字符串日期时间格式,API21   exchange server EWS Java Api自动发现不工作   netbeans是Java新手,似乎无法修复错误;应为类、接口或枚举。274062   我正在尝试将一些scala代码转换为Java8,以创建新的Lambda和并行集合   流中的分配api(java)   用于串行通信的java Python字节数组