简单固定宽度整数
fixedint的Python项目详细描述
此模块提供固定大小的整数类,这些类在 算术运算。它面向需要模拟机器整数的用户。
它提供了灵活的类,用于定义具有固定位数的整数,以及 作为常用机器整数大小的预定义类。这些类可以用作 替换int/long的下拉列表,并可以切片以提取位字段。
提供了这些整数的可变版本,允许使用模拟 机器寄存器。
基本用法
宽度8、16、32和64的预定义固定宽度整数集合可用 有签名和无签名的品种。提供了每种类型的可变和不可变版本。
它们被命名为[Mutable][U]Int<N>,例如UInt64或MutableInt8。使用这些 类,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_bytes和int.from_bytes方法匹配。