#[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>());
RunLayout
NonZeroU8
is guaranteed to have the same layout and bit validity as u8
除了 0
不是有效实例。
Option<NonZeroU8>
is guaranteed to be compatible with u8
,
包括在 FFI 中。
Implementations§
source§impl NonZeroU8
impl NonZeroU8
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 NonZeroU8
impl NonZeroU8
1.64.0 (const: 1.64.0) · sourcepub const fn checked_add(self, other: u8) -> Option<NonZeroU8>
pub const fn checked_add(self, other: u8) -> Option<NonZeroU8>
1.64.0 (const: 1.64.0) · sourcepub const fn saturating_add(self, other: u8) -> NonZeroU8
pub const fn saturating_add(self, other: u8) -> NonZeroU8
sourcepub const unsafe fn unchecked_add(self, other: u8) -> NonZeroU8
🔬This is a nightly-only experimental API. (nonzero_ops
#84186)
pub const unsafe fn unchecked_add(self, other: u8) -> NonZeroU8
nonzero_ops
#84186)1.64.0 (const: 1.64.0) · sourcepub const fn checked_next_power_of_two(self) -> Option<NonZeroU8>
pub const fn checked_next_power_of_two(self) -> Option<NonZeroU8>
返回大于或等于的最小二乘方 n.
如果下一个 2 的幂大于类型的最大值,则检查溢出并返回 None
。
因此,结果不能归零。
Examples
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() );
Run1.67.0 (const: 1.67.0) · sourcepub const fn ilog10(self) -> u32
pub const fn ilog10(self) -> u32
返回数字的以 10 为底的对数,向下取整。
这是相同的操作
u8::ilog10
,
除了它没有需要担心的失败案例,因为这个值永远不会为零。
Examples
assert_eq!(NonZeroU8::new(99).unwrap().ilog10(), 1);
assert_eq!(NonZeroU8::new(100).unwrap().ilog10(), 2);
assert_eq!(NonZeroU8::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 = NonZeroU8::new(1)?;
let two = NonZeroU8::new(2)?;
let four = NonZeroU8::new(4)?;
assert_eq!(one.midpoint(four), two);
assert_eq!(four.midpoint(one), two);
Runsource§impl NonZeroU8
impl NonZeroU8
1.64.0 (const: 1.64.0) · sourcepub const fn checked_mul(self, other: NonZeroU8) -> Option<NonZeroU8>
pub const fn checked_mul(self, other: NonZeroU8) -> Option<NonZeroU8>
1.64.0 (const: 1.64.0) · sourcepub const fn saturating_mul(self, other: NonZeroU8) -> NonZeroU8
pub const fn saturating_mul(self, other: NonZeroU8) -> NonZeroU8
sourcepub const unsafe fn unchecked_mul(self, other: NonZeroU8) -> NonZeroU8
🔬This is a nightly-only experimental API. (nonzero_ops
#84186)
pub const unsafe fn unchecked_mul(self, other: NonZeroU8) -> NonZeroU8
nonzero_ops
#84186)1.64.0 (const: 1.64.0) · sourcepub const fn checked_pow(self, other: u32) -> Option<NonZeroU8>
pub const fn checked_pow(self, other: u32) -> Option<NonZeroU8>
1.64.0 (const: 1.64.0) · sourcepub const fn saturating_pow(self, other: u32) -> NonZeroU8
pub const fn saturating_pow(self, other: u32) -> NonZeroU8
Trait Implementations§
1.45.0 · source§impl BitOrAssign<NonZeroU8> for NonZeroU8
impl BitOrAssign<NonZeroU8> for NonZeroU8
source§fn bitor_assign(&mut self, rhs: Self)
fn bitor_assign(&mut self, rhs: Self)
|=
操作。 Read more1.45.0 · source§impl BitOrAssign<u8> for NonZeroU8
impl BitOrAssign<u8> for NonZeroU8
source§fn bitor_assign(&mut self, rhs: u8)
fn bitor_assign(&mut self, rhs: u8)
|=
操作。 Read more1.41.0 · source§impl From<NonZeroU8> for NonZeroI128
impl From<NonZeroU8> for NonZeroI128
1.41.0 · source§impl From<NonZeroU8> for NonZeroI16
impl From<NonZeroU8> for NonZeroI16
1.41.0 · source§impl From<NonZeroU8> for NonZeroI32
impl From<NonZeroU8> for NonZeroI32
1.41.0 · source§impl From<NonZeroU8> for NonZeroI64
impl From<NonZeroU8> for NonZeroI64
1.41.0 · source§impl From<NonZeroU8> for NonZeroIsize
impl From<NonZeroU8> for NonZeroIsize
1.41.0 · source§impl From<NonZeroU8> for NonZeroU128
impl From<NonZeroU8> for NonZeroU128
1.41.0 · source§impl From<NonZeroU8> for NonZeroU16
impl From<NonZeroU8> for NonZeroU16
1.41.0 · source§impl From<NonZeroU8> for NonZeroU32
impl From<NonZeroU8> for NonZeroU32
1.41.0 · source§impl From<NonZeroU8> for NonZeroU64
impl From<NonZeroU8> for NonZeroU64
1.41.0 · source§impl From<NonZeroU8> for NonZeroUsize
impl From<NonZeroU8> for NonZeroUsize
source§impl PartialOrd<NonZeroU8> for NonZeroU8
impl PartialOrd<NonZeroU8> for NonZeroU8
1.49.0 · source§impl TryFrom<NonZeroI128> for NonZeroU8
impl TryFrom<NonZeroI128> for NonZeroU8
source§fn try_from(value: NonZeroI128) -> Result<Self, Self::Error>
fn try_from(value: NonZeroI128) -> Result<Self, Self::Error>
Attempts to convert NonZeroI128
to NonZeroU8
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroI16> for NonZeroU8
impl TryFrom<NonZeroI16> for NonZeroU8
source§fn try_from(value: NonZeroI16) -> Result<Self, Self::Error>
fn try_from(value: NonZeroI16) -> Result<Self, Self::Error>
Attempts to convert NonZeroI16
to NonZeroU8
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroI32> for NonZeroU8
impl TryFrom<NonZeroI32> for NonZeroU8
source§fn try_from(value: NonZeroI32) -> Result<Self, Self::Error>
fn try_from(value: NonZeroI32) -> Result<Self, Self::Error>
Attempts to convert NonZeroI32
to NonZeroU8
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroI64> for NonZeroU8
impl TryFrom<NonZeroI64> for NonZeroU8
source§fn try_from(value: NonZeroI64) -> Result<Self, Self::Error>
fn try_from(value: NonZeroI64) -> Result<Self, Self::Error>
Attempts to convert NonZeroI64
to NonZeroU8
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroIsize> for NonZeroU8
impl TryFrom<NonZeroIsize> for NonZeroU8
source§fn try_from(value: NonZeroIsize) -> Result<Self, Self::Error>
fn try_from(value: NonZeroIsize) -> Result<Self, Self::Error>
Attempts to convert NonZeroIsize
to NonZeroU8
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroU128> for NonZeroU8
impl TryFrom<NonZeroU128> for NonZeroU8
source§fn try_from(value: NonZeroU128) -> Result<Self, Self::Error>
fn try_from(value: NonZeroU128) -> Result<Self, Self::Error>
Attempts to convert NonZeroU128
to NonZeroU8
.
§type Error = TryFromIntError
type Error = TryFromIntError
1.49.0 · source§impl TryFrom<NonZeroU16> for NonZeroU8
impl TryFrom<NonZeroU16> for NonZeroU8
source§fn try_from(value: NonZeroU16) -> Result<Self, Self::Error>
fn try_from(value: NonZeroU16) -> Result<Self, Self::Error>
Attempts to convert NonZeroU16
to NonZeroU8
.
§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<NonZeroU64> for NonZeroU8
impl TryFrom<NonZeroU64> for NonZeroU8
source§fn try_from(value: NonZeroU64) -> Result<Self, Self::Error>
fn try_from(value: NonZeroU64) -> Result<Self, Self::Error>
Attempts to convert NonZeroU64
to NonZeroU8
.
§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
.