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