Struct core::num::NonZeroUsize
1.28.0 · source · #[repr(transparent)]pub struct NonZeroUsize(_);
Expand description
已知不等于零的整数。
这样可以进行一些内存布局优化。
For example, Option<NonZeroUsize>
is the same size as usize
:
use std::mem::size_of;
assert_eq!(size_of::<Option<core::num::NonZeroUsize>>(), size_of::<usize>());
RunLayout
NonZeroUsize
is guaranteed to have the same layout and bit validity as usize
除了 0
不是有效实例。
Option<NonZeroUsize>
is guaranteed to be compatible with usize
,
包括在 FFI 中。
Implementations§
source§impl NonZeroUsize
impl NonZeroUsize
source§impl NonZeroUsize
impl NonZeroUsize
1.53.0 (const: 1.53.0) · sourcepub const fn leading_zeros(self) -> u32
pub const fn leading_zeros(self) -> u32
1.53.0 (const: 1.53.0) · sourcepub const fn trailing_zeros(self) -> u32
pub const fn trailing_zeros(self) -> u32
source§impl NonZeroUsize
impl NonZeroUsize
1.64.0 (const: 1.64.0) · sourcepub const fn checked_add(self, other: usize) -> Option<NonZeroUsize>
pub const fn checked_add(self, other: usize) -> Option<NonZeroUsize>
1.64.0 (const: 1.64.0) · sourcepub const fn saturating_add(self, other: usize) -> NonZeroUsize
pub const fn saturating_add(self, other: usize) -> NonZeroUsize
将无符号整数与非零值相加。
Return usize::MAX
on overflow.
Examples
let one = NonZeroUsize::new(1)?;
let two = NonZeroUsize::new(2)?;
let max = NonZeroUsize::new(usize::MAX)?;
assert_eq!(two, one.saturating_add(1));
assert_eq!(max, max.saturating_add(1));
Runsourcepub const unsafe fn unchecked_add(self, other: usize) -> NonZeroUsize
🔬This is a nightly-only experimental API. (nonzero_ops
#84186)
pub const unsafe fn unchecked_add(self, other: usize) -> NonZeroUsize
nonzero_ops
#84186)1.64.0 (const: 1.64.0) · sourcepub const fn checked_next_power_of_two(self) -> Option<NonZeroUsize>
pub const fn checked_next_power_of_two(self) -> Option<NonZeroUsize>
返回大于或等于的最小二乘方 n.
如果下一个 2 的幂大于类型的最大值,则检查溢出并返回 None
。
因此,结果不能归零。
Examples
let two = NonZeroUsize::new(2)?;
let three = NonZeroUsize::new(3)?;
let four = NonZeroUsize::new(4)?;
let max = NonZeroUsize::new(usize::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() );
Run1.67.0 (const: 1.67.0) · sourcepub const fn ilog2(self) -> u32
pub const fn ilog2(self) -> u32
返回数字的以 2 为底的对数,向下取整。
这是相同的操作
usize::ilog2
,
除了它没有需要担心的失败案例,因为这个值永远不会为零。
Examples
assert_eq!(NonZeroUsize::new(7).unwrap().ilog2(), 2);
assert_eq!(NonZeroUsize::new(8).unwrap().ilog2(), 3);
assert_eq!(NonZeroUsize::new(9).unwrap().ilog2(), 3);
Run1.67.0 (const: 1.67.0) · sourcepub const fn ilog10(self) -> u32
pub const fn ilog10(self) -> u32
返回数字的以 10 为底的对数,向下取整。
这是相同的操作
usize::ilog10
,
除了它没有需要担心的失败案例,因为这个值永远不会为零。
Examples
assert_eq!(NonZeroUsize::new(99).unwrap().ilog10(), 1);
assert_eq!(NonZeroUsize::new(100).unwrap().ilog10(), 2);
assert_eq!(NonZeroUsize::new(101).unwrap().ilog10(), 2);
Runconst: unstable · sourcepub fn midpoint(self, rhs: Self) -> Self
🔬This is a nightly-only experimental API. (num_midpoint
#110840)
pub fn midpoint(self, rhs: Self) -> Self
num_midpoint
#110840)计算 self
和 rhs
的中点。
midpoint(a, b)
是 (a + b) >> 1
,就好像它是在足够大的带符号整数类型中执行的一样。
这意味着结果总是向 negative 无穷大舍入,并且永远不会发生溢出。
Examples
#![feature(num_midpoint)]
let one = NonZeroUsize::new(1)?;
let two = NonZeroUsize::new(2)?;
let four = NonZeroUsize::new(4)?;
assert_eq!(one.midpoint(four), two);
assert_eq!(four.midpoint(one), two);
Runsource§impl NonZeroUsize
impl NonZeroUsize
1.64.0 (const: 1.64.0) · sourcepub const fn checked_mul(self, other: NonZeroUsize) -> Option<NonZeroUsize>
pub const fn checked_mul(self, other: NonZeroUsize) -> Option<NonZeroUsize>
1.64.0 (const: 1.64.0) · sourcepub const fn saturating_mul(self, other: NonZeroUsize) -> NonZeroUsize
pub const fn saturating_mul(self, other: NonZeroUsize) -> NonZeroUsize
将两个非零整数相乘。
Return usize::MAX
on overflow.
Examples
let two = NonZeroUsize::new(2)?;
let four = NonZeroUsize::new(4)?;
let max = NonZeroUsize::new(usize::MAX)?;
assert_eq!(four, two.saturating_mul(two));
assert_eq!(max, four.saturating_mul(max));
Runsourcepub const unsafe fn unchecked_mul(self, other: NonZeroUsize) -> NonZeroUsize
🔬This is a nightly-only experimental API. (nonzero_ops
#84186)
pub const unsafe fn unchecked_mul(self, other: NonZeroUsize) -> NonZeroUsize
nonzero_ops
#84186)1.64.0 (const: 1.64.0) · sourcepub const fn checked_pow(self, other: u32) -> Option<NonZeroUsize>
pub const fn checked_pow(self, other: u32) -> Option<NonZeroUsize>
1.64.0 (const: 1.64.0) · sourcepub const fn saturating_pow(self, other: u32) -> NonZeroUsize
pub const fn saturating_pow(self, other: u32) -> NonZeroUsize
将非零值提高到整数幂。
Return usize::MAX
on overflow.
Examples
let three = NonZeroUsize::new(3)?;
let twenty_seven = NonZeroUsize::new(27)?;
let max = NonZeroUsize::new(usize::MAX)?;
assert_eq!(twenty_seven, three.saturating_pow(3));
assert_eq!(max, max.saturating_pow(3));
Runsource§impl NonZeroUsize
impl NonZeroUsize
1.59.0 (const: 1.59.0) · sourcepub const fn is_power_of_two(self) -> bool
pub const fn is_power_of_two(self) -> bool
source§impl NonZeroUsize
impl NonZeroUsize
source§impl NonZeroUsize
impl NonZeroUsize
Trait Implementations§
source§impl Binary for NonZeroUsize
impl Binary for NonZeroUsize
1.45.0 · source§impl BitOr<NonZeroUsize> for NonZeroUsize
impl BitOr<NonZeroUsize> for NonZeroUsize
1.45.0 · source§impl BitOr<NonZeroUsize> for usize
impl BitOr<NonZeroUsize> for usize
§type Output = NonZeroUsize
type Output = NonZeroUsize
|
运算符后的结果类型。1.45.0 · source§impl BitOr<usize> for NonZeroUsize
impl BitOr<usize> for NonZeroUsize
1.45.0 · source§impl BitOrAssign<NonZeroUsize> for NonZeroUsize
impl BitOrAssign<NonZeroUsize> for NonZeroUsize
source§fn bitor_assign(&mut self, rhs: Self)
fn bitor_assign(&mut self, rhs: Self)
|=
操作。 Read more1.45.0 · source§impl BitOrAssign<usize> for NonZeroUsize
impl BitOrAssign<usize> for NonZeroUsize
source§fn bitor_assign(&mut self, rhs: usize)
fn bitor_assign(&mut self, rhs: usize)
|=
操作。 Read moresource§impl Clone for NonZeroUsize
impl Clone for NonZeroUsize
source§fn clone(&self) -> NonZeroUsize
fn clone(&self) -> NonZeroUsize
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
执行复制分配。 Read moresource§impl Debug for NonZeroUsize
impl Debug for NonZeroUsize
source§impl Display for NonZeroUsize
impl Display for NonZeroUsize
1.51.0 · source§impl Div<NonZeroUsize> for usize
impl Div<NonZeroUsize> for usize
source§impl From<Alignment> for NonZeroUsize
impl From<Alignment> for NonZeroUsize
source§fn from(align: Alignment) -> NonZeroUsize
fn from(align: Alignment) -> NonZeroUsize
1.41.0 · source§impl From<NonZeroU16> for NonZeroUsize
impl From<NonZeroU16> for NonZeroUsize
source§fn from(small: NonZeroU16) -> Self
fn from(small: NonZeroU16) -> Self
Converts NonZeroU16
to NonZeroUsize
losslessly.
1.41.0 · source§impl From<NonZeroU8> for NonZeroUsize
impl From<NonZeroU8> for NonZeroUsize
1.31.0 · source§impl From<NonZeroUsize> for usize
impl From<NonZeroUsize> for usize
source§fn from(nonzero: NonZeroUsize) -> Self
fn from(nonzero: NonZeroUsize) -> Self
Converts a NonZeroUsize
into an usize
1.35.0 · source§impl FromStr for NonZeroUsize
impl FromStr for NonZeroUsize
source§impl Hash for NonZeroUsize
impl Hash for NonZeroUsize
source§impl LowerHex for NonZeroUsize
impl LowerHex for NonZeroUsize
source§impl Octal for NonZeroUsize
impl Octal for NonZeroUsize
source§impl Ord for NonZeroUsize
impl Ord for NonZeroUsize
source§impl PartialEq<NonZeroUsize> for NonZeroUsize
impl PartialEq<NonZeroUsize> for NonZeroUsize
source§impl PartialOrd<NonZeroUsize> for NonZeroUsize
impl PartialOrd<NonZeroUsize> for NonZeroUsize
1.51.0 · source§impl Rem<NonZeroUsize> for usize
impl Rem<NonZeroUsize> for usize
1.49.0 · source§impl TryFrom<NonZeroI128> for NonZeroUsize
impl TryFrom<NonZeroI128> for NonZeroUsize
source§fn try_from(value: NonZeroI128) -> Result<Self, Self::Error>
fn try_from(value: NonZeroI128) -> Result<Self, Self::Error>
Attempts to convert NonZeroI128
to NonZeroUsize
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroI16> for NonZeroUsize
impl TryFrom<NonZeroI16> for NonZeroUsize
source§fn try_from(value: NonZeroI16) -> Result<Self, Self::Error>
fn try_from(value: NonZeroI16) -> Result<Self, Self::Error>
Attempts to convert NonZeroI16
to NonZeroUsize
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroI32> for NonZeroUsize
impl TryFrom<NonZeroI32> for NonZeroUsize
source§fn try_from(value: NonZeroI32) -> Result<Self, Self::Error>
fn try_from(value: NonZeroI32) -> Result<Self, Self::Error>
Attempts to convert NonZeroI32
to NonZeroUsize
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroI64> for NonZeroUsize
impl TryFrom<NonZeroI64> for NonZeroUsize
source§fn try_from(value: NonZeroI64) -> Result<Self, Self::Error>
fn try_from(value: NonZeroI64) -> Result<Self, Self::Error>
Attempts to convert NonZeroI64
to NonZeroUsize
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroI8> for NonZeroUsize
impl TryFrom<NonZeroI8> for NonZeroUsize
1.49.0 · source§impl TryFrom<NonZeroIsize> for NonZeroUsize
impl TryFrom<NonZeroIsize> for NonZeroUsize
source§fn try_from(value: NonZeroIsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroIsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroIsize
to NonZeroUsize
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroU128> for NonZeroUsize
impl TryFrom<NonZeroU128> for NonZeroUsize
source§fn try_from(value: NonZeroU128) -> Result<Self, Self::Error>
fn try_from(value: NonZeroU128) -> Result<Self, Self::Error>
Attempts to convert NonZeroU128
to NonZeroUsize
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroU32> for NonZeroUsize
impl TryFrom<NonZeroU32> for NonZeroUsize
source§fn try_from(value: NonZeroU32) -> Result<Self, Self::Error>
fn try_from(value: NonZeroU32) -> Result<Self, Self::Error>
Attempts to convert NonZeroU32
to NonZeroUsize
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroU64> for NonZeroUsize
impl TryFrom<NonZeroU64> for NonZeroUsize
source§fn try_from(value: NonZeroU64) -> Result<Self, Self::Error>
fn try_from(value: NonZeroU64) -> Result<Self, Self::Error>
Attempts to convert NonZeroU64
to NonZeroUsize
.
§type Error = TryFromIntError
type Error = TryFromIntError
source§impl TryFrom<NonZeroUsize> for Alignment
impl TryFrom<NonZeroUsize> for Alignment
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroI128
impl TryFrom<NonZeroUsize> for NonZeroI128
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroI128
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroI16
impl TryFrom<NonZeroUsize> for NonZeroI16
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroI16
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroI32
impl TryFrom<NonZeroUsize> for NonZeroI32
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroI32
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroI64
impl TryFrom<NonZeroUsize> for NonZeroI64
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroI64
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroI8
impl TryFrom<NonZeroUsize> for NonZeroI8
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroI8
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroIsize
impl TryFrom<NonZeroUsize> for NonZeroIsize
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroIsize
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroU128
impl TryFrom<NonZeroUsize> for NonZeroU128
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroU128
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroU16
impl TryFrom<NonZeroUsize> for NonZeroU16
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroU16
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroU32
impl TryFrom<NonZeroUsize> for NonZeroU32
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroU32
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroU64
impl TryFrom<NonZeroUsize> for NonZeroU64
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroU64
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroUsize> for NonZeroU8
impl TryFrom<NonZeroUsize> for NonZeroU8
source§fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroUsize
to NonZeroU8
.