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