2 个版本
0.1.1 | 2022 年 1 月 27 日 |
---|---|
0.1.0 | 2022 年 1 月 27 日 |
#380 在 无标准库
每月 30 次下载
在 3 个 Crates 中使用(通过 midpoint)
9KB
为原始整数提供等宽(原始)无符号整数
根据 Rust 参考文档,Rust 中的原始数值整数类型如下
数值类型
整数类型
无符号整数类型包括
类型 | 最小值 | 最大值 |
---|---|---|
u8 |
0 | 28-1 |
u16 |
0 | 216-1 |
u32 |
0 | 232-1 |
u64 |
0 | 264-1 |
u128 |
0 | 2128-1 |
有符号二进制补码整数类型包括
类型 | 最小值 | 最大值 |
---|---|---|
i8 |
-(27) | 27-1 |
i16 |
-(215) | 215-1 |
i32 |
-(231) | 231-1 |
i64 |
-(263) | 263-1 |
i128 |
-(2127) | 2127-1 |
机器相关整数类型
usize
类型是一个与平台指针类型具有相同位数的无符号整数类型。它可以表示进程中的每一个内存地址。
isize
类型是一个与平台指针类型具有相同位数的有符号整数类型。对象和数组大小的理论上限是最大的 isize
值。这确保了 isize
可以用于计算对象或数组指针之间的差异,并且可以访问对象内部的所有字节,以及对象末尾之后的一个字节。
usize
和 isize
至少是 16 位宽。
注意:许多 Rust 代码可能假设指针、
usize
和isize
要么是 32 位,要么是 64 位。因此,16 位指针支持有限,可能需要库显式处理和认可才能支持。
为什么需要这个特性
所有原始数值整数类型,包括机器相关类型,都具有已知的大小,可以通过core::mem::size_of<T>()
获取,以及对应的有符号或无符号类型,大小精确。像C++ 20标准的中点算法这样的算法,既依赖于等大小的原始无符号整数,也依赖于等大小的原始有符号整数。这个crate提供前者。
有关等大小的原始有符号整数,请参考epsi
crate
有符号整数
类型 | 大小 | 等大小的原始无符号整数 |
---|---|---|
i8 |
1字节 | u8 |
i16 |
2字节 | u16 |
i32 |
4字节 | u32 |
i64 |
8字节 | u64 |
i128 |
16字节 | u128 |
isize |
平台相关 | usize |
无符号整数
类型 | 大小 | 等大小的原始无符号整数 |
---|---|---|
u8 |
1字节 | u8 |
u16 |
2字节 | u16 |
u32 |
4字节 | u32 |
u64 |
8字节 | u64 |
u128 |
16字节 | u128 |
usize |
平台相关 | usize |
示例
您可能会注意到EquisizedPrimitiveUnsignedIntExt
的名称相当长。为了使其更短,建议将导入的trait重命名为EPUI
,与crate同名。因为它的使用通常需要与完全限定语法一起使用,这种简写是必不可少的。
use epui::EquisizedPrimitiveUnsignedIntExt as EPUI;
let a = -1i8;
assert_eq!(a as <i8 as EPUI>::EquisizedPrimitiveUnsignedInt, u8::MAX);
类似物
- C++: std::make_unsigned
许可
许可协议为Apache License, Version 2.0或MIT license,您可自由选择。除非您明确声明,否则,根据Apache-2.0许可协议定义的,您有意提交以包括在本crate中的任何贡献,都将双重许可,如上所述,没有任何额外条款或条件。