#[repr(transparent)]
pub struct NonZeroU8(_);
Expand description
已知不等于零的整数。
这样可以进行一些内存布局优化。
For example, Option<NonZeroU8>
is the same size as u8
:
use std::mem::size_of;
assert_eq!(size_of::<Option<core::num::NonZeroU8>>(), size_of::<u8>());
Run
1.28.0 (const: 1.28.0)[src]
创建一个非零值而不检查该值是否为非零值。
如果该值为零,这将导致未定义的行为。
该值不能为零。
1.28.0 (const: 1.47.0)[src]
1.28.0 (const: 1.34.0)[src]
1.53.0 (const: 1.53.0)[src]
返回 self
二进制表示形式中前导零的数目。
在许多体系结构上,此函数可以在基础整数类型上比 leading_zeros()
更好地执行,因为可以避免对零的特殊处理。
基本用法:
let n = std::num::NonZeroU8::new(u8::MAX).unwrap();
assert_eq!(n.leading_zeros(), 0);
Run
1.53.0 (const: 1.53.0)[src]
返回 self
二进制表示形式中的尾随零数。
在许多体系结构上,此函数可以在基础整数类型上比 trailing_zeros()
更好地执行,因为可以避免对零的特殊处理。
基本用法:
let n = std::num::NonZeroU8::new(0b0101000).unwrap();
assert_eq!(n.trailing_zeros(), 3);
Run
🔬 This is a nightly-only experimental API. (
nonzero_ops
#84186)
将无符号整数添加到非零值。
检查溢出并在溢出时返回 None
因此,结果不能归零。
#![feature(nonzero_ops)]
let one = NonZeroU8::new(1)?;
let two = NonZeroU8::new(2)?;
let max = NonZeroU8::new(u8::MAX)?;
assert_eq!(Some(two), one.checked_add(1));
assert_eq!(None, max.checked_add(1));
Run
🔬 This is a nightly-only experimental API. (
nonzero_ops
#84186)
将无符号整数添加到非零值。
Return u8::MAX
on overflow.
#![feature(nonzero_ops)]
let one = NonZeroU8::new(1)?;
let two = NonZeroU8::new(2)?;
let max = NonZeroU8::new(u8::MAX)?;
assert_eq!(two, one.saturating_add(1));
assert_eq!(max, max.saturating_add(1));
Run
🔬 This is a nightly-only experimental API. (
nonzero_ops
#84186)
假设不会发生溢出,将无符号整数添加到非零值。
溢出未检查,如果结果将换行为非零值,则溢出 *even 是未定义的行为 *。
该行为是未定义的
self + rhs > u8::MAX
.
#![feature(nonzero_ops)]
let one = NonZeroU8::new(1)?;
let two = NonZeroU8::new(2)?;
assert_eq!(two, unsafe { one.unchecked_add(1) });
Run
🔬 This is a nightly-only experimental API. (
nonzero_ops
#84186)
返回大于或等于 n 的 2 的最小幂。
如果下一个 2 的幂大于类型的最大值,则检查是否溢出并返回 None
。
因此,结果不能归零。
#![feature(nonzero_ops)]
let two = NonZeroU8::new(2)?;
let three = NonZeroU8::new(3)?;
let four = NonZeroU8::new(4)?;
let max = NonZeroU8::new(u8::MAX)?;
assert_eq!(Some(two), two.checked_next_power_of_two() );
assert_eq!(Some(four), three.checked_next_power_of_two() );
assert_eq!(None, max.checked_next_power_of_two() );
Run
🔬 This is a nightly-only experimental API. (
nonzero_ops
#84186)
将两个非零整数相乘。
检查溢出并在溢出时返回 None
。
因此,结果不能归零。
#![feature(nonzero_ops)]
let two = NonZeroU8::new(2)?;
let four = NonZeroU8::new(4)?;
let max = NonZeroU8::new(u8::MAX)?;
assert_eq!(Some(four), two.checked_mul(two));
assert_eq!(None, max.checked_mul(two));
Run
🔬 This is a nightly-only experimental API. (
nonzero_ops
#84186)
将两个非零整数相乘。
Return u8::MAX
on overflow.
#![feature(nonzero_ops)]
let two = NonZeroU8::new(2)?;
let four = NonZeroU8::new(4)?;
let max = NonZeroU8::new(u8::MAX)?;
assert_eq!(four, two.saturating_mul(two));
assert_eq!(max, four.saturating_mul(max));
Run
🔬 This is a nightly-only experimental API. (
nonzero_ops
#84186)
假设不会发生溢出,将两个非零整数相乘。
溢出未检查,如果结果将换行为非零值,则溢出 *even 是未定义的行为 *。
该行为是未定义的
self * rhs > u8::MAX
.
#![feature(nonzero_ops)]
let two = NonZeroU8::new(2)?;
let four = NonZeroU8::new(4)?;
assert_eq!(four, unsafe { two.unchecked_mul(two) });
Run
🔬 This is a nightly-only experimental API. (
nonzero_ops
#84186)
将非零值提高到整数幂。
检查溢出并在溢出时返回 None
。
因此,结果不能归零。
#![feature(nonzero_ops)]
let three = NonZeroU8::new(3)?;
let twenty_seven = NonZeroU8::new(27)?;
let half_max = NonZeroU8::new(u8::MAX / 2)?;
assert_eq!(Some(twenty_seven), three.checked_pow(3));
assert_eq!(None, half_max.checked_pow(3));
Run
🔬 This is a nightly-only experimental API. (
nonzero_ops
#84186)
将非零值提高到整数幂。
Return u8::MAX
on overflow.
#![feature(nonzero_ops)]
let three = NonZeroU8::new(3)?;
let twenty_seven = NonZeroU8::new(27)?;
let max = NonZeroU8::new(u8::MAX)?;
assert_eq!(twenty_seven, three.saturating_pow(3));
assert_eq!(max, max.saturating_pow(3));
Run
🔬 This is a nightly-only experimental API. (
nonzero_is_power_of_two
#81106)
当且仅当某些 k
的 self == (1 << k)
时,才返回 true
。
在许多体系结构上,此函数可以在基础整数类型上比 is_power_of_two()
更好地执行,因为可以避免对零的特殊处理。
基本用法:
#![feature(nonzero_is_power_of_two)]
let eight = std::num::NonZeroU8::new(8).unwrap();
assert!(eight.is_power_of_two());
let ten = std::num::NonZeroU8::new(10).unwrap();
assert!(!ten.is_power_of_two());
Run
此运算将舍入为零,舍去精确结果的任何小数部分,并且不能为 panic。
Converts a NonZeroU8
into an u8
Converts NonZeroU8
to NonZeroU16
losslessly.
Converts NonZeroU8
to NonZeroIsize
losslessly.
Converts NonZeroU8
to NonZeroU32
losslessly.
Converts NonZeroU8
to NonZeroU64
losslessly.
Converts NonZeroU8
to NonZeroU128
losslessly.
Converts NonZeroU8
to NonZeroUsize
losslessly.
Converts NonZeroU8
to NonZeroI16
losslessly.
Converts NonZeroU8
to NonZeroI32
losslessly.
Converts NonZeroU8
to NonZeroI64
losslessly.
Converts NonZeroU8
to NonZeroI128
losslessly.
此方法测试的内容少于 (对于 self
和 other
),并且由 <
操作员使用。 Read more
此方法测试小于或等于 (对于 self
和 other
),并且由 <=
运算符使用。 Read more
此方法测试大于 (对于 self
和 other
),并且由 >
操作员使用。 Read more
此方法测试是否大于或等于 (对于 self
和 other
),并且由 >=
运算符使用。 Read more
此操作满足 n % d == n - (n / d) * d
,但不能为 panic。
Attempts to convert NonZeroI128
to NonZeroU8
.
Attempts to convert NonZeroI16
to NonZeroU8
.
Attempts to convert NonZeroI32
to NonZeroU8
.
Attempts to convert NonZeroI64
to NonZeroU8
.
Attempts to convert NonZeroI8
to NonZeroU8
.
Attempts to convert NonZeroIsize
to NonZeroU8
.
Attempts to convert NonZeroU128
to NonZeroU8
.
Attempts to convert NonZeroU16
to NonZeroU8
.
Attempts to convert NonZeroU32
to NonZeroU8
.
Attempts to convert NonZeroU64
to NonZeroU8
.
Attempts to convert NonZeroU8
to NonZeroI8
.
Attempts to convert NonZeroUsize
to NonZeroU8
.
Attempts to convert u8
to NonZeroU8
.