Primitive Type u161.0.0[−]
Expand description
16 位无符号整数类型。
Implementations
未经检查的整数加法。
假设不会发生溢出,则计算 self + rhs
。
Safety
当以下情况时,这导致未定义的行为
self + rhs > u16::MAX
or self + rhs < u16::MIN
,
即当 checked_add
将返回 None
时。
未经检查的整数减法。
假设不会发生溢出,则计算 self - rhs
。
Safety
当以下情况时,这导致未定义的行为
self - rhs > u16::MAX
or self - rhs < u16::MIN
,
即当 checked_sub
将返回 None
时。
未经检查的整数乘法。
假设不会发生溢出,则计算 self * rhs
。
Safety
当以下情况时,这导致未定义的行为
self * rhs > u16::MAX
or self * rhs < u16::MIN
,
即当 checked_mul
将返回 None
时。
未检查的左移。
计算 self << rhs
,假设 rhs
小于 self
中的位数。
Safety
如果 rhs
大于或等于 self
中的位数,则会导致未定义的行为,即
当 checked_shl
返回 None
时。
未检查右移。
计算 self >> rhs
,假设 rhs
小于 self
中的位数。
Safety
如果 rhs
大于或等于 self
中的位数,则会导致未定义的行为,即
当 checked_shr
返回 None
时。
包装 (modular) 取反。
计算 -self
,在类型的边界处回绕。
由于无符号类型没有负的等效项,因此该函数的所有应用程序都将自动换行 (-0
除外)。
对于小于相应有符号类型的最大值的值,结果与强制转换相应有符号值的结果相同。
任何较大的值都等于 MAX + 1 - (val - MAX - 1)
,其中 MAX
是对应的有符号类型的最大值。
Examples
基本用法:
请注意,此示例在整数类型之间共享。
这就解释了为什么在这里使用 i8
。
assert_eq!(100i8.wrapping_neg(), -100);
assert_eq!((-128i8).wrapping_neg(), -128);
Run无 Panic - 按位左移;
产生 self << mask(rhs)
,其中 mask
删除 rhs
的所有高位,这些高位将导致移位超过该类型的位宽。
注意,这与左旋不同; 环绕左移的 RHS 限于该类型的范围,而不是从 LHS 移出的位返回到另一端。
所有原始整数类型都实现了 rotate_left
函数,而您可能想要的是 rotate_left
函数。
Examples
基本用法:
assert_eq!(1u16.wrapping_shl(7), 128);
assert_eq!(1u16.wrapping_shl(128), 1);
Run无 Panic - 按位右移;
产生 self >> mask(rhs)
,其中 mask
删除 rhs
的所有高位,这些高位将导致移位超过该类型的位宽。
注意,这与右旋转不同。换行右移的 RHS 限于类型的范围,而不是从 LHS 移出的位返回到另一端。
所有原始整数类型都实现了 rotate_right
函数,而您可能想要的是 rotate_right
函数。
Examples
基本用法:
assert_eq!(128u16.wrapping_shr(7), 1);
assert_eq!(128u16.wrapping_shr(128), 128);
Run计算 self + rhs + carry
没有溢出的能力。
执行 “三元加法”,它需要添加一个额外的位,并可能返回一个额外的溢出位。 这允许将多个添加链接在一起以创建代表更大值的 “大整数”。
This can be thought of as a 16-bit “full adder”, in the electronics sense.
Examples
基本用法
#![feature(bigint_helper_methods)]
assert_eq!(5u16.carrying_add(2, false), (7, false));
assert_eq!(5u16.carrying_add(2, true), (8, false));
assert_eq!(u16::MAX.carrying_add(1, false), (0, true));
assert_eq!(u16::MAX.carrying_add(0, true), (0, true));
assert_eq!(u16::MAX.carrying_add(1, true), (1, true));
assert_eq!(u16::MAX.carrying_add(u16::MAX, true), (u16::MAX, true));
RunIf carry
is false, this method is equivalent to overflowing_add
:
#![feature(bigint_helper_methods)]
assert_eq!(5_u16.carrying_add(2, false), 5_u16.overflowing_add(2));
assert_eq!(u16::MAX.carrying_add(1, false), u16::MAX.overflowing_add(1));
Run计算 self - rhs - borrow
没有溢出的能力。
执行 “三元减法”,它接受一个额外的位来减去,并且可能返回一个额外的溢出位。 这允许将多个减法链接在一起以创建代表更大值的 “大整数”。
Examples
基本用法
#![feature(bigint_helper_methods)]
assert_eq!(5u16.borrowing_sub(2, false), (3, false));
assert_eq!(5u16.borrowing_sub(2, true), (2, false));
assert_eq!(0u16.borrowing_sub(1, false), (u16::MAX, true));
assert_eq!(0u16.borrowing_sub(1, true), (u16::MAX - 1, true));
Run计算大于或等于 rhs
倍数的 self
的最小值。
如果 rhs
为零,则返回 None
,否则操作将导致溢出。
Examples
基本用法:
#![feature(int_roundings)]
assert_eq!(16_u16.checked_next_multiple_of(8), Some(16));
assert_eq!(23_u16.checked_next_multiple_of(8), Some(24));
assert_eq!(1_u16.checked_next_multiple_of(0), None);
assert_eq!(u16::MAX.checked_next_multiple_of(2), None);
Run将此整数的内存表示作为本机字节顺序的字节数组返回。
由于使用了目标平台的原生字节序,因此,可移植代码应酌情使用 to_be_bytes
或 to_le_bytes
。
Examples
let bytes = 0x1234u16.to_ne_bytes();
assert_eq!(
bytes,
if cfg!(target_endian = "big") {
[0x12, 0x34]
} else {
[0x34, 0x12]
}
);
Run根据其表示形式 (大字节序中的字节数组) 创建一个本地字节序整数值。
Examples
let value = u16::from_be_bytes([0x12, 0x34]);
assert_eq!(value, 0x1234);
Run从切片而不是数组开始时,可以使用容易出错的转换 API:
use std::convert::TryInto;
fn read_be_u16(input: &mut &[u8]) -> u16 {
let (int_bytes, rest) = input.split_at(std::mem::size_of::<u16>());
*input = rest;
u16::from_be_bytes(int_bytes.try_into().unwrap())
}
Run从它的表示形式以 little endian 的字节数组创建一个本地 endian 整数值。
Examples
let value = u16::from_le_bytes([0x34, 0x12]);
assert_eq!(value, 0x1234);
Run从切片而不是数组开始时,可以使用容易出错的转换 API:
use std::convert::TryInto;
fn read_le_u16(input: &mut &[u8]) -> u16 {
let (int_bytes, rest) = input.split_at(std::mem::size_of::<u16>());
*input = rest;
u16::from_le_bytes(int_bytes.try_into().unwrap())
}
Run从其内存表示形式以原生字节序形式创建一个原生字节序整数值。
由于使用了目标平台的原生字节序,因此可移植代码可能希望酌情使用 from_be_bytes
或 from_le_bytes
。
Examples
let value = u16::from_ne_bytes(if cfg!(target_endian = "big") {
[0x12, 0x34]
} else {
[0x34, 0x12]
});
assert_eq!(value, 0x1234);
Run从切片而不是数组开始时,可以使用容易出错的转换 API:
use std::convert::TryInto;
fn read_ne_u16(input: &mut &[u8]) -> u16 {
let (int_bytes, rest) = input.split_at(std::mem::size_of::<u16>());
*input = rest;
u16::from_ne_bytes(int_bytes.try_into().unwrap())
}
Run👎 Deprecating in a future Rust version: replaced by the MIN
associated constant on this type
replaced by the MIN
associated constant on this type
新代码应优先使用
u16::MIN
instead.
返回此整数类型可以表示的最小值。
👎 Deprecating in a future Rust version: replaced by the MAX
associated constant on this type
replaced by the MAX
associated constant on this type
新代码应优先使用
u16::MAX
instead.
返回此整数类型可以表示的最大值。
计算 “full multiplication” self * rhs + carry
而不可能溢出。
这将返回结果的低位 (wrapping) 位和高位 (overflow) 位作为两个单独的值,按该顺序。
执行 “long multiplication”,它需要添加额外的量,并且可能返回额外的溢出量。 这允许将多个乘法链接在一起以创建代表更大值的 “大整数”。
Examples
基本用法:
请注意,此示例在整数类型之间共享。
这就解释了为什么在这里使用 u32
。
#![feature(bigint_helper_methods)]
assert_eq!(5u32.carrying_mul(2, 0), (10, 0));
assert_eq!(5u32.carrying_mul(2, 10), (20, 0));
assert_eq!(1_000_000_000u32.carrying_mul(10, 0), (1410065408, 2));
assert_eq!(1_000_000_000u32.carrying_mul(10, 10), (1410065418, 2));
assert_eq!(u16::MAX.carrying_mul(u16::MAX, u16::MAX), (0, u16::MAX));
RunIf carry
is zero, this is similar to overflowing_mul
,
except that it gives the value of the overflow instead of just whether one happened:
#![feature(bigint_helper_methods)]
let r = u8::carrying_mul(7, 13, 0);
assert_eq!((r.0, r.1 != 0), u8::overflowing_mul(7, 13));
let r = u8::carrying_mul(13, 42, 0);
assert_eq!((r.0, r.1 != 0), u8::overflowing_mul(13, 42));
RunThe value of the first field in the returned tuple matches what you’d get
by combining the wrapping_mul
and
wrapping_add
methods:
#![feature(bigint_helper_methods)]
assert_eq!(
789_u16.carrying_mul(456, 123).0, 789_u16.wrapping_mul(456).wrapping_add(123), );
RunTrait Implementations
执行 +=
操作。 Read more
执行 +=
操作。 Read more
执行 &=
操作。 Read more
执行 &=
操作。 Read more
type Output = NonZeroU16
type Output = NonZeroU16
应用 |
运算符后的结果类型。
执行 |
操作。 Read more
type Output = NonZeroU16
type Output = NonZeroU16
应用 |
运算符后的结果类型。
执行 |=
操作。 Read more
执行 |=
操作。 Read more
执行 |=
操作。 Read more
执行 ^=
操作。 Read more
执行 ^=
操作。 Read more
执行 /=
操作。 Read more
执行 /=
操作。 Read more
Converts a NonZeroU16
into an u16
type Err = ParseIntError
type Err = ParseIntError
可以从解析中返回的相关错误。
执行 *=
操作。 Read more
执行 *=
操作。 Read more
如果存在,则此方法返回 self
和 other
值之间的顺序。 Read more
执行 %=
操作。 Read more
执行 %=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 <<=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 >>=
操作。 Read more
执行 -=
操作。 Read more
执行 -=
操作。 Read more
Attempts to convert u16
to NonZeroU16
.
type Error = TryFromIntError
type Error = TryFromIntError
发生转换错误时返回的类型。