pub struct TicksFrozen(pub i32);Expand description
A metadata field for AbstractEntity.
Tuple Fields§
§0: i32Methods from Deref<Target = i32>§
1.0.0 · Sourcepub fn count_ones(self) -> u32
pub fn count_ones(self) -> u32
Returns the number of ones in the binary representation of self.
§Examples
let n = 0b100_0000i32;
assert_eq!(n.count_ones(), 1);1.0.0 · Sourcepub fn count_zeros(self) -> u32
pub fn count_zeros(self) -> u32
Returns the number of zeros in the binary representation of self.
§Examples
assert_eq!(i32::MAX.count_zeros(), 1);1.0.0 · Sourcepub fn leading_zeros(self) -> u32
pub fn leading_zeros(self) -> u32
1.0.0 · Sourcepub fn trailing_zeros(self) -> u32
pub fn trailing_zeros(self) -> u32
Returns the number of trailing zeros in the binary representation of self.
§Examples
let n = -4i32;
assert_eq!(n.trailing_zeros(), 2);1.46.0 · Sourcepub fn leading_ones(self) -> u32
pub fn leading_ones(self) -> u32
Returns the number of leading ones in the binary representation of self.
§Examples
let n = -1i32;
assert_eq!(n.leading_ones(), 32);1.46.0 · Sourcepub fn trailing_ones(self) -> u32
pub fn trailing_ones(self) -> u32
Returns the number of trailing ones in the binary representation of self.
§Examples
let n = 3i32;
assert_eq!(n.trailing_ones(), 2);1.97.0 · Sourcepub fn isolate_highest_one(self) -> i32
pub fn isolate_highest_one(self) -> i32
Returns self with only the most significant bit set, or 0 if
the input is 0.
§Examples
let n: i32 = 0b_01100100;
assert_eq!(n.isolate_highest_one(), 0b_01000000);
assert_eq!(0_i32.isolate_highest_one(), 0);1.97.0 · Sourcepub fn isolate_lowest_one(self) -> i32
pub fn isolate_lowest_one(self) -> i32
Returns self with only the least significant bit set, or 0 if
the input is 0.
§Examples
let n: i32 = 0b_01100100;
assert_eq!(n.isolate_lowest_one(), 0b_00000100);
assert_eq!(0_i32.isolate_lowest_one(), 0);1.97.0 · Sourcepub fn highest_one(self) -> Option<u32>
pub fn highest_one(self) -> Option<u32>
Returns the index of the highest bit set to one in self, or None
if self is 0.
Note that for non-negative numbers, this is equivalent to
checked_ilog2.
§Examples
assert_eq!(0b0_i32.highest_one(), None);
assert_eq!(0b1_i32.highest_one(), Some(0));
assert_eq!(0b1_0000_i32.highest_one(), Some(4));
assert_eq!(0b1_1111_i32.highest_one(), Some(4));1.97.0 · Sourcepub fn lowest_one(self) -> Option<u32>
pub fn lowest_one(self) -> Option<u32>
Returns the index of the lowest bit set to one in self, or None
if self is 0.
§Examples
assert_eq!(0b0_i32.lowest_one(), None);
assert_eq!(0b1_i32.lowest_one(), Some(0));
assert_eq!(0b1_0000_i32.lowest_one(), Some(4));
assert_eq!(0b1_1111_i32.lowest_one(), Some(0));1.87.0 · Sourcepub fn cast_unsigned(self) -> u32
pub fn cast_unsigned(self) -> u32
Returns the bit pattern of self reinterpreted as an unsigned integer of the same size.
This produces the same result as an as cast, but ensures that the bit-width remains
the same.
§Examples
let n = -1i32;
assert_eq!(n.cast_unsigned(), u32::MAX);Sourcepub fn saturating_cast_unsigned(self) -> u32
🔬This is a nightly-only experimental API. (integer_cast_extras)
pub fn saturating_cast_unsigned(self) -> u32
integer_cast_extras)Saturating conversion of self to an unsigned integer of the same size.
Negative values are clamped to 0.
For other kinds of unsigned integer casts, see
cast_unsigned,
checked_cast_unsigned,
or strict_cast_unsigned.
§Examples
#![feature(integer_cast_extras)]
let n = i32::MIN;
assert_eq!(n.saturating_cast_unsigned(), 0u32);
assert_eq!(64i32.saturating_cast_unsigned(), 64u32);Sourcepub fn checked_cast_unsigned(self) -> Option<u32>
🔬This is a nightly-only experimental API. (integer_cast_extras)
pub fn checked_cast_unsigned(self) -> Option<u32>
integer_cast_extras)Checked conversion of self to an unsigned integer of the same size,
returning None if self is negative.
For other kinds of unsigned integer casts, see
cast_unsigned,
saturating_cast_unsigned,
or strict_cast_unsigned.
§Examples
#![feature(integer_cast_extras)]
let n = i32::MIN;
assert_eq!(n.checked_cast_unsigned(), None);
assert_eq!(64i32.checked_cast_unsigned(), Some(64u32));Sourcepub fn strict_cast_unsigned(self) -> u32
🔬This is a nightly-only experimental API. (integer_cast_extras)
pub fn strict_cast_unsigned(self) -> u32
integer_cast_extras)Strict conversion of self to an unsigned integer of the same size,
which panics if self is negative.
For other kinds of unsigned integer casts, see
cast_unsigned,
checked_cast_unsigned,
or saturating_cast_unsigned.
§Examples
#![feature(integer_cast_extras)]
let _ = i32::MIN.strict_cast_unsigned();1.0.0 · Sourcepub fn rotate_left(self, n: u32) -> i32
pub fn rotate_left(self, n: u32) -> i32
Shifts the bits to the left by a specified amount, n,
wrapping the truncated bits to the end of the resulting integer.
rotate_left(n) is equivalent to applying rotate_left(1) a total of n times. In
particular, a rotation by the number of bits in self returns the input value
unchanged.
Please note this isn’t the same operation as the << shifting operator!
§Examples
let n = 0x010000b3i32;
let m = 0x0000b301;
assert_eq!(n.rotate_left(8), m);
assert_eq!(n.rotate_left(1024), n);1.0.0 · Sourcepub fn rotate_right(self, n: u32) -> i32
pub fn rotate_right(self, n: u32) -> i32
Shifts the bits to the right by a specified amount, n,
wrapping the truncated bits to the beginning of the resulting
integer.
rotate_right(n) is equivalent to applying rotate_right(1) a total of n times. In
particular, a rotation by the number of bits in self returns the input value
unchanged.
Please note this isn’t the same operation as the >> shifting operator!
§Examples
let n = 0x0000b301i32;
let m = 0x010000b3;
assert_eq!(n.rotate_right(8), m);
assert_eq!(n.rotate_right(1024), n);1.0.0 · Sourcepub fn swap_bytes(self) -> i32
pub fn swap_bytes(self) -> i32
Reverses the byte order of the integer.
§Examples
let n = 0x12345678i32;
let m = n.swap_bytes();
assert_eq!(m, 0x78563412);1.37.0 · Sourcepub fn reverse_bits(self) -> i32
pub fn reverse_bits(self) -> i32
Reverses the order of bits in the integer. The least significant bit becomes the most significant bit, second least-significant bit becomes second most-significant bit, etc.
§Examples
let n = 0x12345678i32;
let m = n.reverse_bits();
assert_eq!(m, 0x1e6a2c48);
assert_eq!(0, 0i32.reverse_bits());1.0.0 · Sourcepub fn to_be(self) -> i32
pub fn to_be(self) -> i32
Swaps bytes of self on little endian targets.
On big endian this is a no-op.
The returned value has the same type as self, and will be interpreted
as (a potentially different) value of a native-endian
i32.
See to_be_bytes() for a type-safe alternative.
§Examples
let n = 0x1Ai32;
if cfg!(target_endian = "big") {
assert_eq!(n.to_be(), n)
} else {
assert_eq!(n.to_be(), n.swap_bytes())
}1.0.0 · Sourcepub fn to_le(self) -> i32
pub fn to_le(self) -> i32
Swaps bytes of self on big endian targets.
On little endian this is a no-op.
The returned value has the same type as self, and will be interpreted
as (a potentially different) value of a native-endian
i32.
See to_le_bytes() for a type-safe alternative.
§Examples
let n = 0x1Ai32;
if cfg!(target_endian = "little") {
assert_eq!(n.to_le(), n)
} else {
assert_eq!(n.to_le(), n.swap_bytes())
}1.0.0 · Sourcepub fn checked_add(self, rhs: i32) -> Option<i32>
pub fn checked_add(self, rhs: i32) -> Option<i32>
Checked integer addition. Computes self + rhs, returning None
if overflow occurred.
§Examples
assert_eq!((i32::MAX - 2).checked_add(1), Some(i32::MAX - 1));
assert_eq!((i32::MAX - 2).checked_add(3), None);1.91.0 · Sourcepub fn strict_add(self, rhs: i32) -> i32
pub fn strict_add(self, rhs: i32) -> i32
Strict integer addition. Computes self + rhs, panicking
if overflow occurred.
§Panics
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
§Examples
assert_eq!((i32::MAX - 2).strict_add(1), i32::MAX - 1);The following panics because of overflow:
let _ = (i32::MAX - 2).strict_add(3);1.79.0 · Sourcepub unsafe fn unchecked_add(self, rhs: i32) -> i32
pub unsafe fn unchecked_add(self, rhs: i32) -> i32
Unchecked integer addition. Computes self + rhs, assuming overflow
cannot occur.
Calling x.unchecked_add(y) is semantically equivalent to calling
x.checked_add(y).unwrap_unchecked().
If you’re just trying to avoid the panic in debug mode, then do not
use this. Instead, you’re looking for wrapping_add.
§Safety
This results in undefined behavior when
self + rhs > i32::MAX or self + rhs < i32::MIN,
i.e. when checked_add would return None.
1.66.0 · Sourcepub fn checked_add_unsigned(self, rhs: u32) -> Option<i32>
pub fn checked_add_unsigned(self, rhs: u32) -> Option<i32>
Checked addition with an unsigned integer. Computes self + rhs,
returning None if overflow occurred.
§Examples
assert_eq!(1i32.checked_add_unsigned(2), Some(3));
assert_eq!((i32::MAX - 2).checked_add_unsigned(3), None);1.91.0 · Sourcepub fn strict_add_unsigned(self, rhs: u32) -> i32
pub fn strict_add_unsigned(self, rhs: u32) -> i32
Strict addition with an unsigned integer. Computes self + rhs,
panicking if overflow occurred.
§Panics
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
§Examples
assert_eq!(1i32.strict_add_unsigned(2), 3);The following panics because of overflow:
let _ = (i32::MAX - 2).strict_add_unsigned(3);1.0.0 · Sourcepub fn checked_sub(self, rhs: i32) -> Option<i32>
pub fn checked_sub(self, rhs: i32) -> Option<i32>
Checked integer subtraction. Computes self - rhs, returning None if
overflow occurred.
§Examples
assert_eq!((i32::MIN + 2).checked_sub(1), Some(i32::MIN + 1));
assert_eq!((i32::MIN + 2).checked_sub(3), None);1.91.0 · Sourcepub fn strict_sub(self, rhs: i32) -> i32
pub fn strict_sub(self, rhs: i32) -> i32
Strict integer subtraction. Computes self - rhs, panicking if
overflow occurred.
§Panics
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
§Examples
assert_eq!((i32::MIN + 2).strict_sub(1), i32::MIN + 1);The following panics because of overflow:
let _ = (i32::MIN + 2).strict_sub(3);1.79.0 · Sourcepub unsafe fn unchecked_sub(self, rhs: i32) -> i32
pub unsafe fn unchecked_sub(self, rhs: i32) -> i32
Unchecked integer subtraction. Computes self - rhs, assuming overflow
cannot occur.
Calling x.unchecked_sub(y) is semantically equivalent to calling
x.checked_sub(y).unwrap_unchecked().
If you’re just trying to avoid the panic in debug mode, then do not
use this. Instead, you’re looking for wrapping_sub.
§Safety
This results in undefined behavior when
self - rhs > i32::MAX or self - rhs < i32::MIN,
i.e. when checked_sub would return None.
1.66.0 · Sourcepub fn checked_sub_unsigned(self, rhs: u32) -> Option<i32>
pub fn checked_sub_unsigned(self, rhs: u32) -> Option<i32>
Checked subtraction with an unsigned integer. Computes self - rhs,
returning None if overflow occurred.
§Examples
assert_eq!(1i32.checked_sub_unsigned(2), Some(-1));
assert_eq!((i32::MIN + 2).checked_sub_unsigned(3), None);1.91.0 · Sourcepub fn strict_sub_unsigned(self, rhs: u32) -> i32
pub fn strict_sub_unsigned(self, rhs: u32) -> i32
Strict subtraction with an unsigned integer. Computes self - rhs,
panicking if overflow occurred.
§Panics
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
§Examples
assert_eq!(1i32.strict_sub_unsigned(2), -1);The following panics because of overflow:
let _ = (i32::MIN + 2).strict_sub_unsigned(3);1.0.0 · Sourcepub fn checked_mul(self, rhs: i32) -> Option<i32>
pub fn checked_mul(self, rhs: i32) -> Option<i32>
Checked integer multiplication. Computes self * rhs, returning None if
overflow occurred.
§Examples
assert_eq!(i32::MAX.checked_mul(1), Some(i32::MAX));
assert_eq!(i32::MAX.checked_mul(2), None);1.91.0 · Sourcepub fn strict_mul(self, rhs: i32) -> i32
pub fn strict_mul(self, rhs: i32) -> i32
Strict integer multiplication. Computes self * rhs, panicking if
overflow occurred.
§Panics
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
§Examples
assert_eq!(i32::MAX.strict_mul(1), i32::MAX);The following panics because of overflow:
let _ = i32::MAX.strict_mul(2);1.79.0 · Sourcepub unsafe fn unchecked_mul(self, rhs: i32) -> i32
pub unsafe fn unchecked_mul(self, rhs: i32) -> i32
Unchecked integer multiplication. Computes self * rhs, assuming overflow
cannot occur.
Calling x.unchecked_mul(y) is semantically equivalent to calling
x.checked_mul(y).unwrap_unchecked().
If you’re just trying to avoid the panic in debug mode, then do not
use this. Instead, you’re looking for wrapping_mul.
§Safety
This results in undefined behavior when
self * rhs > i32::MAX or self * rhs < i32::MIN,
i.e. when checked_mul would return None.
1.0.0 · Sourcepub fn checked_div(self, rhs: i32) -> Option<i32>
pub fn checked_div(self, rhs: i32) -> Option<i32>
Checked integer division. Computes self / rhs, returning None if rhs == 0
or the division results in overflow.
§Examples
assert_eq!((i32::MIN + 1).checked_div(-1), Some(2147483647));
assert_eq!(i32::MIN.checked_div(-1), None);
assert_eq!((1i32).checked_div(0), None);1.91.0 · Sourcepub fn strict_div(self, rhs: i32) -> i32
pub fn strict_div(self, rhs: i32) -> i32
Strict integer division. Computes self / rhs, panicking
if overflow occurred.
§Panics
This function will panic if rhs is zero.
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
The only case where such an overflow can occur is when one divides MIN / -1 on a signed type (where
MIN is the negative minimal value for the type); the result of this is -MIN, a positive value
that is too large to represent in the type.
Note that this is equivalent to normal division: MIN / -1 will also panic both in
debug and release builds.
§Examples
assert_eq!((i32::MIN + 1).strict_div(-1), 2147483647);The following panics because of overflow:
let _ = i32::MIN.strict_div(-1);The following panics because of division by zero:
let _ = (1i32).strict_div(0);1.38.0 · Sourcepub fn checked_div_euclid(self, rhs: i32) -> Option<i32>
pub fn checked_div_euclid(self, rhs: i32) -> Option<i32>
Checked Euclidean division. Computes self.div_euclid(rhs),
returning None if rhs == 0 or the division results in overflow.
§Examples
assert_eq!((i32::MIN + 1).checked_div_euclid(-1), Some(2147483647));
assert_eq!(i32::MIN.checked_div_euclid(-1), None);
assert_eq!((1i32).checked_div_euclid(0), None);1.91.0 · Sourcepub fn strict_div_euclid(self, rhs: i32) -> i32
pub fn strict_div_euclid(self, rhs: i32) -> i32
Strict Euclidean division. Computes self.div_euclid(rhs), panicking
if overflow occurred.
§Panics
This function will panic if rhs is zero.
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
The only case where such an overflow can occur is when one divides MIN / -1 on a signed type (where
MIN is the negative minimal value for the type); the result of this is -MIN, a positive value
that is too large to represent in the type.
Note that this is equivalent to div_euclid: MIN.div_euclid(-1) will also panic both
in debug and release builds.
§Examples
assert_eq!((i32::MIN + 1).strict_div_euclid(-1), 2147483647);The following panics because of overflow:
let _ = i32::MIN.strict_div_euclid(-1);The following panics because of division by zero:
let _ = (1i32).strict_div_euclid(0);Sourcepub fn checked_div_exact(self, rhs: i32) -> Option<i32>
🔬This is a nightly-only experimental API. (exact_div)
pub fn checked_div_exact(self, rhs: i32) -> Option<i32>
exact_div)Checked integer division without remainder. Computes self / rhs,
returning None if rhs == 0, the division results in overflow,
or self % rhs != 0.
§Examples
#![feature(exact_div)]
assert_eq!((i32::MIN + 1).checked_div_exact(-1), Some(2147483647));
assert_eq!((-5i32).checked_div_exact(2), None);
assert_eq!(i32::MIN.checked_div_exact(-1), None);
assert_eq!((1i32).checked_div_exact(0), None);Sourcepub fn div_exact(self, rhs: i32) -> Option<i32>
🔬This is a nightly-only experimental API. (exact_div)
pub fn div_exact(self, rhs: i32) -> Option<i32>
exact_div)Integer division without remainder. Computes self / rhs, returning None if self % rhs != 0.
§Panics
This function will panic if rhs == 0.
§Overflow behavior
On overflow, this function will panic if overflow checks are enabled (default in debug mode) and wrap if overflow checks are disabled (default in release mode).
§Examples
#![feature(exact_div)]
assert_eq!(64i32.div_exact(2), Some(32));
assert_eq!(64i32.div_exact(32), Some(2));
assert_eq!((i32::MIN + 1).div_exact(-1), Some(2147483647));
assert_eq!(65i32.div_exact(2), None);#![feature(exact_div)]
let _ = 64i32.div_exact(0);#![feature(exact_div)]
let _ = i32::MIN.div_exact(-1);Sourcepub unsafe fn unchecked_div_exact(self, rhs: i32) -> i32
🔬This is a nightly-only experimental API. (exact_div)
pub unsafe fn unchecked_div_exact(self, rhs: i32) -> i32
exact_div)Unchecked integer division without remainder. Computes self / rhs.
§Safety
This results in undefined behavior when rhs == 0, self % rhs != 0, or
self == i32::MIN && rhs == -1,
i.e. when checked_div_exact would return None.
1.7.0 · Sourcepub fn checked_rem(self, rhs: i32) -> Option<i32>
pub fn checked_rem(self, rhs: i32) -> Option<i32>
Checked integer remainder. Computes self % rhs, returning None if
rhs == 0 or the division results in overflow.
§Examples
assert_eq!(5i32.checked_rem(2), Some(1));
assert_eq!(5i32.checked_rem(0), None);
assert_eq!(i32::MIN.checked_rem(-1), None);1.91.0 · Sourcepub fn strict_rem(self, rhs: i32) -> i32
pub fn strict_rem(self, rhs: i32) -> i32
Strict integer remainder. Computes self % rhs, panicking if
the division results in overflow.
§Panics
This function will panic if rhs is zero.
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
The only case where such an overflow can occur is x % y for MIN / -1 on a
signed type (where MIN is the negative minimal value), which is invalid due to implementation artifacts.
§Examples
assert_eq!(5i32.strict_rem(2), 1);The following panics because of division by zero:
let _ = 5i32.strict_rem(0);The following panics because of overflow:
let _ = i32::MIN.strict_rem(-1);1.38.0 · Sourcepub fn checked_rem_euclid(self, rhs: i32) -> Option<i32>
pub fn checked_rem_euclid(self, rhs: i32) -> Option<i32>
Checked Euclidean remainder. Computes self.rem_euclid(rhs), returning None
if rhs == 0 or the division results in overflow.
§Examples
assert_eq!(5i32.checked_rem_euclid(2), Some(1));
assert_eq!(5i32.checked_rem_euclid(0), None);
assert_eq!(i32::MIN.checked_rem_euclid(-1), None);1.91.0 · Sourcepub fn strict_rem_euclid(self, rhs: i32) -> i32
pub fn strict_rem_euclid(self, rhs: i32) -> i32
Strict Euclidean remainder. Computes self.rem_euclid(rhs), panicking if
the division results in overflow.
§Panics
This function will panic if rhs is zero.
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
The only case where such an overflow can occur is x % y for MIN / -1 on a
signed type (where MIN is the negative minimal value), which is invalid due to implementation artifacts.
§Examples
assert_eq!(5i32.strict_rem_euclid(2), 1);The following panics because of division by zero:
let _ = 5i32.strict_rem_euclid(0);The following panics because of overflow:
let _ = i32::MIN.strict_rem_euclid(-1);1.7.0 · Sourcepub fn checked_neg(self) -> Option<i32>
pub fn checked_neg(self) -> Option<i32>
Checked negation. Computes -self, returning None if self == MIN.
§Examples
assert_eq!(5i32.checked_neg(), Some(-5));
assert_eq!(i32::MIN.checked_neg(), None);1.93.0 · Sourcepub unsafe fn unchecked_neg(self) -> i32
pub unsafe fn unchecked_neg(self) -> i32
Unchecked negation. Computes -self, assuming overflow cannot occur.
§Safety
This results in undefined behavior when
self == i32::MIN,
i.e. when checked_neg would return None.
1.91.0 · Sourcepub fn strict_neg(self) -> i32
pub fn strict_neg(self) -> i32
1.7.0 · Sourcepub fn checked_shl(self, rhs: u32) -> Option<i32>
pub fn checked_shl(self, rhs: u32) -> Option<i32>
Checked shift left. Computes self << rhs, returning None if rhs is larger
than or equal to the number of bits in self.
§Examples
assert_eq!(0x1i32.checked_shl(4), Some(0x10));
assert_eq!(0x1i32.checked_shl(129), None);
assert_eq!(0x10i32.checked_shl(31), Some(0));1.91.0 · Sourcepub fn strict_shl(self, rhs: u32) -> i32
pub fn strict_shl(self, rhs: u32) -> i32
Strict shift left. Computes self << rhs, panicking if rhs is larger
than or equal to the number of bits in self.
§Panics
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
§Examples
assert_eq!(0x1i32.strict_shl(4), 0x10);The following panics because of overflow:
let _ = 0x1i32.strict_shl(129);1.93.0 · Sourcepub unsafe fn unchecked_shl(self, rhs: u32) -> i32
pub unsafe fn unchecked_shl(self, rhs: u32) -> i32
Unchecked shift left. Computes self << rhs, assuming that
rhs is less than the number of bits in self.
§Safety
This results in undefined behavior if rhs is larger than
or equal to the number of bits in self,
i.e. when checked_shl would return None.
1.87.0 · Sourcepub fn unbounded_shl(self, rhs: u32) -> i32
pub fn unbounded_shl(self, rhs: u32) -> i32
Unbounded shift left. Computes self << rhs, without bounding the value of rhs.
If rhs is larger or equal to the number of bits in self,
the entire value is shifted out, and 0 is returned.
§Examples
assert_eq!(0x1_i32.unbounded_shl(4), 0x10);
assert_eq!(0x1_i32.unbounded_shl(129), 0);
assert_eq!(0b101_i32.unbounded_shl(0), 0b101);
assert_eq!(0b101_i32.unbounded_shl(1), 0b1010);
assert_eq!(0b101_i32.unbounded_shl(2), 0b10100);
assert_eq!(42_i32.unbounded_shl(32), 0);
assert_eq!(42_i32.unbounded_shl(1).unbounded_shl(31), 0);
assert_eq!((-13_i32).unbounded_shl(32), 0);
assert_eq!((-13_i32).unbounded_shl(1).unbounded_shl(31), 0);Sourcepub fn shl_exact(self, rhs: u32) -> Option<i32>
🔬This is a nightly-only experimental API. (exact_bitshifts)
pub fn shl_exact(self, rhs: u32) -> Option<i32>
exact_bitshifts)Exact shift left. Computes self << rhs as long as it can be reversed losslessly.
Returns None if any bits that would be shifted out differ from the resulting sign bit
or if rhs >=
i32::BITS.
Otherwise, returns Some(self << rhs).
§Examples
#![feature(exact_bitshifts)]
assert_eq!(0x1i32.shl_exact(4), Some(0x10));
assert_eq!(0x1i32.shl_exact(i32::BITS - 2), Some(1 << i32::BITS - 2));
assert_eq!(0x1i32.shl_exact(i32::BITS - 1), None);
assert_eq!((-0x2i32).shl_exact(i32::BITS - 2), Some(-0x2 << i32::BITS - 2));
assert_eq!((-0x2i32).shl_exact(i32::BITS - 1), None);Sourcepub unsafe fn unchecked_shl_exact(self, rhs: u32) -> i32
🔬This is a nightly-only experimental API. (exact_bitshifts)
pub unsafe fn unchecked_shl_exact(self, rhs: u32) -> i32
exact_bitshifts)Unchecked exact shift left. Computes self << rhs, assuming the operation can be
losslessly reversed and rhs cannot be larger than
i32::BITS.
§Safety
This results in undefined behavior when rhs >= self.leading_zeros() && rhs >= self.leading_ones() i.e. when
i32::shl_exact
would return None.
1.7.0 · Sourcepub fn checked_shr(self, rhs: u32) -> Option<i32>
pub fn checked_shr(self, rhs: u32) -> Option<i32>
Checked shift right. Computes self >> rhs, returning None if rhs is
larger than or equal to the number of bits in self.
§Examples
assert_eq!(0x10i32.checked_shr(4), Some(0x1));
assert_eq!(0x10i32.checked_shr(128), None);1.91.0 · Sourcepub fn strict_shr(self, rhs: u32) -> i32
pub fn strict_shr(self, rhs: u32) -> i32
Strict shift right. Computes self >> rhs, panicking if rhs is
larger than or equal to the number of bits in self.
§Panics
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
§Examples
assert_eq!(0x10i32.strict_shr(4), 0x1);The following panics because of overflow:
let _ = 0x10i32.strict_shr(128);1.93.0 · Sourcepub unsafe fn unchecked_shr(self, rhs: u32) -> i32
pub unsafe fn unchecked_shr(self, rhs: u32) -> i32
Unchecked shift right. Computes self >> rhs, assuming that
rhs is less than the number of bits in self.
§Safety
This results in undefined behavior if rhs is larger than
or equal to the number of bits in self,
i.e. when checked_shr would return None.
1.87.0 · Sourcepub fn unbounded_shr(self, rhs: u32) -> i32
pub fn unbounded_shr(self, rhs: u32) -> i32
Unbounded shift right. Computes self >> rhs, without bounding the value of rhs.
If rhs is larger or equal to the number of bits in self,
the entire value is shifted out, which yields 0 for a positive number,
and -1 for a negative number.
§Examples
assert_eq!(0x10_i32.unbounded_shr(4), 0x1);
assert_eq!(0x10_i32.unbounded_shr(129), 0);
assert_eq!(i32::MIN.unbounded_shr(129), -1);
assert_eq!(0b1010_i32.unbounded_shr(0), 0b1010);
assert_eq!(0b1010_i32.unbounded_shr(1), 0b101);
assert_eq!(0b1010_i32.unbounded_shr(2), 0b10);
assert_eq!(42_i32.unbounded_shr(32), 0);
assert_eq!(42_i32.unbounded_shr(1).unbounded_shr(31), 0);
assert_eq!((-13_i32).unbounded_shr(32), -1);
assert_eq!((-13_i32).unbounded_shr(1).unbounded_shr(31), -1);Sourcepub fn shr_exact(self, rhs: u32) -> Option<i32>
🔬This is a nightly-only experimental API. (exact_bitshifts)
pub fn shr_exact(self, rhs: u32) -> Option<i32>
exact_bitshifts)Exact shift right. Computes self >> rhs as long as it can be reversed losslessly.
Returns None if any non-zero bits would be shifted out or if rhs >=
i32::BITS.
Otherwise, returns Some(self >> rhs).
§Examples
#![feature(exact_bitshifts)]
assert_eq!(0x10i32.shr_exact(4), Some(0x1));
assert_eq!(0x10i32.shr_exact(5), None);Sourcepub unsafe fn unchecked_shr_exact(self, rhs: u32) -> i32
🔬This is a nightly-only experimental API. (exact_bitshifts)
pub unsafe fn unchecked_shr_exact(self, rhs: u32) -> i32
exact_bitshifts)Unchecked exact shift right. Computes self >> rhs, assuming the operation can be
losslessly reversed and rhs cannot be larger than
i32::BITS.
§Safety
This results in undefined behavior when rhs > self.trailing_zeros() || rhs >= i32::BITS
i.e. when
i32::shr_exact
would return None.
1.13.0 · Sourcepub fn checked_abs(self) -> Option<i32>
pub fn checked_abs(self) -> Option<i32>
Checked absolute value. Computes self.abs(), returning None if
self == MIN.
§Examples
assert_eq!((-5i32).checked_abs(), Some(5));
assert_eq!(i32::MIN.checked_abs(), None);1.91.0 · Sourcepub fn strict_abs(self) -> i32
pub fn strict_abs(self) -> i32
Strict absolute value. Computes self.abs(), panicking if
self == MIN.
§Panics
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
§Examples
assert_eq!((-5i32).strict_abs(), 5);The following panics because of overflow:
let _ = i32::MIN.strict_abs();1.34.0 · Sourcepub fn checked_pow(self, exp: u32) -> Option<i32>
pub fn checked_pow(self, exp: u32) -> Option<i32>
Checked exponentiation. Computes self.pow(exp), returning None if
overflow occurred.
§Examples
assert_eq!(8i32.checked_pow(2), Some(64));
assert_eq!(0_i32.checked_pow(0), Some(1));
assert_eq!(i32::MAX.checked_pow(2), None);1.91.0 · Sourcepub fn strict_pow(self, exp: u32) -> i32
pub fn strict_pow(self, exp: u32) -> i32
Strict exponentiation. Computes self.pow(exp), panicking if
overflow occurred.
§Panics
§Overflow behavior
This function will always panic on overflow, regardless of whether overflow checks are enabled.
§Examples
assert_eq!(8i32.strict_pow(2), 64);
assert_eq!(0_i32.strict_pow(0), 1);The following panics because of overflow:
let _ = i32::MAX.strict_pow(2);1.84.0 · Sourcepub fn checked_isqrt(self) -> Option<i32>
pub fn checked_isqrt(self) -> Option<i32>
Returns the integer square root of the number, rounded down.
This function returns the principal (non-negative) square root.
For a given number n, although both x and -x satisfy x2 = n,
this function always returns the non-negative value.
Returns None if self is negative.
§Examples
assert_eq!(10i32.checked_isqrt(), Some(3));1.0.0 · Sourcepub fn saturating_add(self, rhs: i32) -> i32
pub fn saturating_add(self, rhs: i32) -> i32
Saturating integer addition. Computes self + rhs, saturating at the numeric
bounds instead of overflowing.
§Examples
assert_eq!(100i32.saturating_add(1), 101);
assert_eq!(i32::MAX.saturating_add(100), i32::MAX);
assert_eq!(i32::MIN.saturating_add(-1), i32::MIN);1.66.0 · Sourcepub fn saturating_add_unsigned(self, rhs: u32) -> i32
pub fn saturating_add_unsigned(self, rhs: u32) -> i32
Saturating addition with an unsigned integer. Computes self + rhs,
saturating at the numeric bounds instead of overflowing.
§Examples
assert_eq!(1i32.saturating_add_unsigned(2), 3);
assert_eq!(i32::MAX.saturating_add_unsigned(100), i32::MAX);1.0.0 · Sourcepub fn saturating_sub(self, rhs: i32) -> i32
pub fn saturating_sub(self, rhs: i32) -> i32
Saturating integer subtraction. Computes self - rhs, saturating at the
numeric bounds instead of overflowing.
§Examples
assert_eq!(100i32.saturating_sub(127), -27);
assert_eq!(i32::MIN.saturating_sub(100), i32::MIN);
assert_eq!(i32::MAX.saturating_sub(-1), i32::MAX);1.66.0 · Sourcepub fn saturating_sub_unsigned(self, rhs: u32) -> i32
pub fn saturating_sub_unsigned(self, rhs: u32) -> i32
Saturating subtraction with an unsigned integer. Computes self - rhs,
saturating at the numeric bounds instead of overflowing.
§Examples
assert_eq!(100i32.saturating_sub_unsigned(127), -27);
assert_eq!(i32::MIN.saturating_sub_unsigned(100), i32::MIN);1.45.0 · Sourcepub fn saturating_neg(self) -> i32
pub fn saturating_neg(self) -> i32
Saturating integer negation. Computes -self, returning MAX if self == MIN
instead of overflowing.
§Examples
assert_eq!(100i32.saturating_neg(), -100);
assert_eq!((-100i32).saturating_neg(), 100);
assert_eq!(i32::MIN.saturating_neg(), i32::MAX);
assert_eq!(i32::MAX.saturating_neg(), i32::MIN + 1);1.45.0 · Sourcepub fn saturating_abs(self) -> i32
pub fn saturating_abs(self) -> i32
Saturating absolute value. Computes self.abs(), returning MAX if self == MIN instead of overflowing.
§Examples
assert_eq!(100i32.saturating_abs(), 100);
assert_eq!((-100i32).saturating_abs(), 100);
assert_eq!(i32::MIN.saturating_abs(), i32::MAX);
assert_eq!((i32::MIN + 1).saturating_abs(), i32::MAX);1.7.0 · Sourcepub fn saturating_mul(self, rhs: i32) -> i32
pub fn saturating_mul(self, rhs: i32) -> i32
Saturating integer multiplication. Computes self * rhs, saturating at the
numeric bounds instead of overflowing.
§Examples
assert_eq!(10i32.saturating_mul(12), 120);
assert_eq!(i32::MAX.saturating_mul(10), i32::MAX);
assert_eq!(i32::MIN.saturating_mul(10), i32::MIN);1.58.0 · Sourcepub fn saturating_div(self, rhs: i32) -> i32
pub fn saturating_div(self, rhs: i32) -> i32
Saturating integer division. Computes self / rhs, saturating at the
numeric bounds instead of overflowing.
§Panics
This function will panic if rhs is zero.
§Examples
assert_eq!(5i32.saturating_div(2), 2);
assert_eq!(i32::MAX.saturating_div(-1), i32::MIN + 1);
assert_eq!(i32::MIN.saturating_div(-1), i32::MAX);
1.34.0 · Sourcepub fn saturating_pow(self, exp: u32) -> i32
pub fn saturating_pow(self, exp: u32) -> i32
Saturating integer exponentiation. Computes self.pow(exp),
saturating at the numeric bounds instead of overflowing.
§Examples
assert_eq!((-4i32).saturating_pow(3), -64);
assert_eq!(0_i32.saturating_pow(0), 1);
assert_eq!(i32::MIN.saturating_pow(2), i32::MAX);
assert_eq!(i32::MIN.saturating_pow(3), i32::MIN);1.0.0 · Sourcepub fn wrapping_add(self, rhs: i32) -> i32
pub fn wrapping_add(self, rhs: i32) -> i32
Wrapping (modular) addition. Computes self + rhs, wrapping around at the
boundary of the type.
§Examples
assert_eq!(100i32.wrapping_add(27), 127);
assert_eq!(i32::MAX.wrapping_add(2), i32::MIN + 1);1.66.0 · Sourcepub fn wrapping_add_unsigned(self, rhs: u32) -> i32
pub fn wrapping_add_unsigned(self, rhs: u32) -> i32
Wrapping (modular) addition with an unsigned integer. Computes
self + rhs, wrapping around at the boundary of the type.
§Examples
assert_eq!(100i32.wrapping_add_unsigned(27), 127);
assert_eq!(i32::MAX.wrapping_add_unsigned(2), i32::MIN + 1);1.0.0 · Sourcepub fn wrapping_sub(self, rhs: i32) -> i32
pub fn wrapping_sub(self, rhs: i32) -> i32
Wrapping (modular) subtraction. Computes self - rhs, wrapping around at the
boundary of the type.
§Examples
assert_eq!(0i32.wrapping_sub(127), -127);
assert_eq!((-2i32).wrapping_sub(i32::MAX), i32::MAX);1.66.0 · Sourcepub fn wrapping_sub_unsigned(self, rhs: u32) -> i32
pub fn wrapping_sub_unsigned(self, rhs: u32) -> i32
Wrapping (modular) subtraction with an unsigned integer. Computes
self - rhs, wrapping around at the boundary of the type.
§Examples
assert_eq!(0i32.wrapping_sub_unsigned(127), -127);
assert_eq!((-2i32).wrapping_sub_unsigned(u32::MAX), -1);1.0.0 · Sourcepub fn wrapping_mul(self, rhs: i32) -> i32
pub fn wrapping_mul(self, rhs: i32) -> i32
Wrapping (modular) multiplication. Computes self * rhs, wrapping around at
the boundary of the type.
§Examples
assert_eq!(10i32.wrapping_mul(12), 120);
assert_eq!(11i8.wrapping_mul(12), -124);1.2.0 · Sourcepub fn wrapping_div(self, rhs: i32) -> i32
pub fn wrapping_div(self, rhs: i32) -> i32
Wrapping (modular) division. Computes self / rhs, wrapping around at the
boundary of the type.
The only case where such wrapping can occur is when one divides MIN / -1 on a signed type (where
MIN is the negative minimal value for the type); this is equivalent to -MIN, a positive value
that is too large to represent in the type. In such a case, this function returns MIN itself.
§Panics
This function will panic if rhs is zero.
§Examples
assert_eq!(100i32.wrapping_div(10), 10);
assert_eq!((-128i8).wrapping_div(-1), -128);1.38.0 · Sourcepub fn wrapping_div_euclid(self, rhs: i32) -> i32
pub fn wrapping_div_euclid(self, rhs: i32) -> i32
Wrapping Euclidean division. Computes self.div_euclid(rhs),
wrapping around at the boundary of the type.
Wrapping will only occur in MIN / -1 on a signed type (where MIN is the negative minimal value
for the type). This is equivalent to -MIN, a positive value that is too large to represent in the
type. In this case, this method returns MIN itself.
§Panics
This function will panic if rhs is zero.
§Examples
assert_eq!(100i32.wrapping_div_euclid(10), 10);
assert_eq!((-128i8).wrapping_div_euclid(-1), -128);1.2.0 · Sourcepub fn wrapping_rem(self, rhs: i32) -> i32
pub fn wrapping_rem(self, rhs: i32) -> i32
Wrapping (modular) remainder. Computes self % rhs, wrapping around at the
boundary of the type.
Such wrap-around never actually occurs mathematically; implementation artifacts make x % y
invalid for MIN / -1 on a signed type (where MIN is the negative minimal value). In such a case,
this function returns 0.
§Panics
This function will panic if rhs is zero.
§Examples
assert_eq!(100i32.wrapping_rem(10), 0);
assert_eq!((-128i8).wrapping_rem(-1), 0);1.38.0 · Sourcepub fn wrapping_rem_euclid(self, rhs: i32) -> i32
pub fn wrapping_rem_euclid(self, rhs: i32) -> i32
Wrapping Euclidean remainder. Computes self.rem_euclid(rhs), wrapping around
at the boundary of the type.
Wrapping will only occur in MIN % -1 on a signed type (where MIN is
the negative minimal value for the type). In this case, this method returns 0.
§Panics
This function will panic if rhs is zero.
§Examples
assert_eq!(100i32.wrapping_rem_euclid(10), 0);
assert_eq!((-128i8).wrapping_rem_euclid(-1), 0);1.2.0 · Sourcepub fn wrapping_neg(self) -> i32
pub fn wrapping_neg(self) -> i32
Wrapping (modular) negation. Computes -self, wrapping around at the boundary
of the type.
The only case where such wrapping can occur is when one negates MIN on a signed type (where MIN
is the negative minimal value for the type); this is a positive value that is too large to represent
in the type. In such a case, this function returns MIN itself.
§Examples
assert_eq!(100i32.wrapping_neg(), -100);
assert_eq!((-100i32).wrapping_neg(), 100);
assert_eq!(i32::MIN.wrapping_neg(), i32::MIN);1.2.0 · Sourcepub fn wrapping_shl(self, rhs: u32) -> i32
pub fn wrapping_shl(self, rhs: u32) -> i32
Panic-free bitwise shift-left; yields self << mask(rhs), where mask removes
any high-order bits of rhs that would cause the shift to exceed the bitwidth of the type.
Beware that, unlike most other wrapping_* methods on integers, this
does not give the same result as doing the shift in infinite precision
then truncating as needed. Instead, the behaviour of this method matches what shift instructions
do on many processors, and is what the << operator does when overflow
checks are disabled, but numerically it’s weird. Consider, instead,
using Self::unbounded_shl which has nicer behaviour.
Note that this is not the same as a rotate-left; the RHS of a wrapping shift-left is restricted to
the range of the type, rather than the bits shifted out of the LHS being returned to the other end.
The primitive integer types all implement a rotate_left function,
which may be what you want instead.
§Examples
assert_eq!((-1_i32).wrapping_shl(7), -128);
assert_eq!(42_i32.wrapping_shl(32), 42);
assert_eq!(42_i32.wrapping_shl(1).wrapping_shl(31), 0);
assert_eq!((-1_i32).wrapping_shl(128), -1);
assert_eq!(5_i32.wrapping_shl(1025), 10);1.2.0 · Sourcepub fn wrapping_shr(self, rhs: u32) -> i32
pub fn wrapping_shr(self, rhs: u32) -> i32
Panic-free bitwise shift-right; yields self >> mask(rhs), where mask
removes any high-order bits of rhs that would cause the shift to exceed the bitwidth of the type.
Beware that, unlike most other wrapping_* methods on integers, this
does not give the same result as doing the shift in infinite precision
then truncating as needed. Instead, the behaviour of this method matches what shift instructions
do on many processors, and is what the >> operator does when overflow
checks are disabled, but numerically it’s weird. Consider, instead,
using Self::unbounded_shr which has nicer behaviour.
Note that this is not the same as a rotate-right; the RHS of a wrapping shift-right is restricted
to the range of the type, rather than the bits shifted out of the LHS being returned to the other
end. The primitive integer types all implement a rotate_right function,
which may be what you want instead.
§Examples
assert_eq!((-128_i32).wrapping_shr(7), -1);
assert_eq!(42_i32.wrapping_shr(32), 42);
assert_eq!(42_i32.wrapping_shr(1).wrapping_shr(31), 0);
assert_eq!((-128_i16).wrapping_shr(64), -128);
assert_eq!(10_i32.wrapping_shr(1025), 5);1.13.0 · Sourcepub fn wrapping_abs(self) -> i32
pub fn wrapping_abs(self) -> i32
Wrapping (modular) absolute value. Computes self.abs(), wrapping around at
the boundary of the type.
The only case where such wrapping can occur is when one takes the absolute value of the negative
minimal value for the type; this is a positive value that is too large to represent in the type. In
such a case, this function returns MIN itself.
§Examples
assert_eq!(100i32.wrapping_abs(), 100);
assert_eq!((-100i32).wrapping_abs(), 100);
assert_eq!(i32::MIN.wrapping_abs(), i32::MIN);
assert_eq!((-128i8).wrapping_abs() as u8, 128);1.51.0 · Sourcepub fn unsigned_abs(self) -> u32
pub fn unsigned_abs(self) -> u32
Computes the absolute value of self without any wrapping
or panicking.
§Examples
assert_eq!(100i32.unsigned_abs(), 100u32);
assert_eq!((-100i32).unsigned_abs(), 100u32);
assert_eq!((-128i8).unsigned_abs(), 128u8);1.34.0 · Sourcepub fn wrapping_pow(self, exp: u32) -> i32
pub fn wrapping_pow(self, exp: u32) -> i32
Wrapping (modular) exponentiation. Computes self.pow(exp),
wrapping around at the boundary of the type.
§Examples
assert_eq!(3i32.wrapping_pow(4), 81);
assert_eq!(3i8.wrapping_pow(5), -13);
assert_eq!(3i8.wrapping_pow(6), -39);
assert_eq!(0_i32.wrapping_pow(0), 1);1.7.0 · Sourcepub fn overflowing_add(self, rhs: i32) -> (i32, bool)
pub fn overflowing_add(self, rhs: i32) -> (i32, bool)
Calculates self + rhs.
Returns a tuple of the addition along with a boolean indicating
whether an arithmetic overflow would occur. If an overflow would have
occurred then the wrapped value is returned (negative if overflowed
above MAX, non-negative if below MIN).
§Examples
assert_eq!(5i32.overflowing_add(2), (7, false));
assert_eq!(i32::MAX.overflowing_add(1), (i32::MIN, true));Sourcepub fn carrying_add(self, rhs: i32, carry: bool) -> (i32, bool)
🔬This is a nightly-only experimental API. (signed_bigint_helpers)
pub fn carrying_add(self, rhs: i32, carry: bool) -> (i32, bool)
signed_bigint_helpers)Calculates self + rhs + carry and checks for overflow.
Performs “ternary addition” of two integer operands and a carry-in bit, and returns a tuple of the sum along with a boolean indicating whether an arithmetic overflow would occur. On overflow, the wrapped value is returned.
This allows chaining together multiple additions to create a wider
addition, and can be useful for bignum addition. This method should
only be used for the most significant word; for the less significant
words the unsigned method
u32::carrying_add
should be used.
The output boolean returned by this method is not a carry flag, and should not be added to a more significant word.
If overflow occurred, the wrapped value is returned (negative if overflowed
above MAX, non-negative if below MIN).
If the input carry is false, this method is equivalent to
overflowing_add.
§Examples
#![feature(signed_bigint_helpers)]
// Only the most significant word is signed.
//
// 10 MAX (a = 10 × 2^32 + 2^32 - 1)
// + -5 9 (b = -5 × 2^32 + 9)
// ---------
// 6 8 (sum = 6 × 2^32 + 8)
let (a1, a0): (i32, u32) = (10, u32::MAX);
let (b1, b0): (i32, u32) = (-5, 9);
let carry0 = false;
// u32::carrying_add for the less significant words
let (sum0, carry1) = a0.carrying_add(b0, carry0);
assert_eq!(carry1, true);
// i32::carrying_add for the most significant word
let (sum1, overflow) = a1.carrying_add(b1, carry1);
assert_eq!(overflow, false);
assert_eq!((sum1, sum0), (6, 8));1.66.0 · Sourcepub fn overflowing_add_unsigned(self, rhs: u32) -> (i32, bool)
pub fn overflowing_add_unsigned(self, rhs: u32) -> (i32, bool)
Calculates self + rhs with an unsigned rhs.
Returns a tuple of the addition along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would have occurred then the wrapped value is returned.
§Examples
assert_eq!(1i32.overflowing_add_unsigned(2), (3, false));
assert_eq!((i32::MIN).overflowing_add_unsigned(u32::MAX), (i32::MAX, false));
assert_eq!((i32::MAX - 2).overflowing_add_unsigned(3), (i32::MIN, true));1.7.0 · Sourcepub fn overflowing_sub(self, rhs: i32) -> (i32, bool)
pub fn overflowing_sub(self, rhs: i32) -> (i32, bool)
Calculates self - rhs.
Returns a tuple of the subtraction along with a boolean indicating whether an arithmetic overflow
would occur. If an overflow would have occurred then the wrapped value is returned
(negative if overflowed above MAX, non-negative if below MIN).
§Examples
assert_eq!(5i32.overflowing_sub(2), (3, false));
assert_eq!(i32::MIN.overflowing_sub(1), (i32::MAX, true));Sourcepub fn borrowing_sub(self, rhs: i32, borrow: bool) -> (i32, bool)
🔬This is a nightly-only experimental API. (signed_bigint_helpers)
pub fn borrowing_sub(self, rhs: i32, borrow: bool) -> (i32, bool)
signed_bigint_helpers)Calculates self − rhs − borrow and checks for
overflow.
Performs “ternary subtraction” by subtracting both an integer
operand and a borrow-in bit from self, and returns a tuple of the
difference along with a boolean indicating whether an arithmetic
overflow would occur. On overflow, the wrapped value is returned.
This allows chaining together multiple subtractions to create a
wider subtraction, and can be useful for bignum subtraction. This
method should only be used for the most significant word; for the
less significant words the unsigned method
u32::borrowing_sub
should be used.
The output boolean returned by this method is not a borrow flag, and should not be subtracted from a more significant word.
If overflow occurred, the wrapped value is returned (negative if overflowed
above MAX, non-negative if below MIN).
If the input borrow is false, this method is equivalent to
overflowing_sub.
§Examples
#![feature(signed_bigint_helpers)]
// Only the most significant word is signed.
//
// 6 8 (a = 6 × 2^32 + 8)
// - -5 9 (b = -5 × 2^32 + 9)
// ---------
// 10 MAX (diff = 10 × 2^32 + 2^32 - 1)
let (a1, a0): (i32, u32) = (6, 8);
let (b1, b0): (i32, u32) = (-5, 9);
let borrow0 = false;
// u32::borrowing_sub for the less significant words
let (diff0, borrow1) = a0.borrowing_sub(b0, borrow0);
assert_eq!(borrow1, true);
// i32::borrowing_sub for the most significant word
let (diff1, overflow) = a1.borrowing_sub(b1, borrow1);
assert_eq!(overflow, false);
assert_eq!((diff1, diff0), (10, u32::MAX));1.66.0 · Sourcepub fn overflowing_sub_unsigned(self, rhs: u32) -> (i32, bool)
pub fn overflowing_sub_unsigned(self, rhs: u32) -> (i32, bool)
Calculates self - rhs with an unsigned rhs.
Returns a tuple of the subtraction along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would have occurred then the wrapped value is returned.
§Examples
assert_eq!(1i32.overflowing_sub_unsigned(2), (-1, false));
assert_eq!((i32::MAX).overflowing_sub_unsigned(u32::MAX), (i32::MIN, false));
assert_eq!((i32::MIN + 2).overflowing_sub_unsigned(3), (i32::MAX, true));1.7.0 · Sourcepub fn overflowing_mul(self, rhs: i32) -> (i32, bool)
pub fn overflowing_mul(self, rhs: i32) -> (i32, bool)
Calculates the multiplication of self and rhs.
Returns a tuple of the multiplication along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would have occurred then the wrapped value is returned.
§Examples
assert_eq!(5i32.overflowing_mul(2), (10, false));
assert_eq!(1_000_000_000i32.overflowing_mul(10), (1410065408, true));Sourcepub fn carrying_mul(self, rhs: i32, carry: i32) -> (u32, i32)
🔬This is a nightly-only experimental API. (signed_bigint_helpers)
pub fn carrying_mul(self, rhs: i32, carry: i32) -> (u32, i32)
signed_bigint_helpers)Calculates the “full multiplication” self * rhs + carry
without the possibility to overflow.
This returns the low-order (wrapping) bits and the high-order (overflow) bits of the result as two separate values, in that order.
Performs “long multiplication” which takes in an extra amount to add, and may return an additional amount of overflow. This allows for chaining together multiple multiplications to create “big integers” which represent larger values.
§Examples
Please note that this example is shared among integer types, which is why i32 is used.
#![feature(signed_bigint_helpers)]
assert_eq!(5i32.carrying_mul(-2, 0), (4294967286, -1));
assert_eq!(5i32.carrying_mul(-2, 10), (0, 0));
assert_eq!(1_000_000_000i32.carrying_mul(-10, 0), (2884901888, -3));
assert_eq!(1_000_000_000i32.carrying_mul(-10, 10), (2884901898, -3));
assert_eq!(i32::MAX.carrying_mul(i32::MAX, i32::MAX), (i32::MAX.unsigned_abs() + 1, i32::MAX / 2));Sourcepub fn carrying_mul_add(self, rhs: i32, carry: i32, add: i32) -> (u32, i32)
🔬This is a nightly-only experimental API. (signed_bigint_helpers)
pub fn carrying_mul_add(self, rhs: i32, carry: i32, add: i32) -> (u32, i32)
signed_bigint_helpers)Calculates the “full multiplication” self * rhs + carry + add
without the possibility to overflow.
This returns the low-order (wrapping) bits and the high-order (overflow) bits of the result as two separate values, in that order.
Performs “long multiplication” which takes in an extra amount to add, and may return an additional amount of overflow. This allows for chaining together multiple multiplications to create “big integers” which represent larger values.
If you only need one carry, then you can use Self::carrying_mul instead.
§Examples
Please note that this example is shared among integer types, which is why i32 is used.
#![feature(signed_bigint_helpers)]
assert_eq!(5i32.carrying_mul_add(-2, 0, 0), (4294967286, -1));
assert_eq!(5i32.carrying_mul_add(-2, 10, 10), (10, 0));
assert_eq!(1_000_000_000i32.carrying_mul_add(-10, 0, 0), (2884901888, -3));
assert_eq!(1_000_000_000i32.carrying_mul_add(-10, 10, 10), (2884901908, -3));
assert_eq!(i32::MAX.carrying_mul_add(i32::MAX, i32::MAX, i32::MAX), (u32::MAX, i32::MAX / 2));1.7.0 · Sourcepub fn overflowing_div(self, rhs: i32) -> (i32, bool)
pub fn overflowing_div(self, rhs: i32) -> (i32, bool)
Calculates the divisor when self is divided by rhs.
Returns a tuple of the divisor along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would occur then self is returned.
§Panics
This function will panic if rhs is zero.
§Examples
assert_eq!(5i32.overflowing_div(2), (2, false));
assert_eq!(i32::MIN.overflowing_div(-1), (i32::MIN, true));1.38.0 · Sourcepub fn overflowing_div_euclid(self, rhs: i32) -> (i32, bool)
pub fn overflowing_div_euclid(self, rhs: i32) -> (i32, bool)
Calculates the quotient of Euclidean division self.div_euclid(rhs).
Returns a tuple of the divisor along with a boolean indicating whether an arithmetic overflow would
occur. If an overflow would occur then self is returned.
§Panics
This function will panic if rhs is zero.
§Examples
assert_eq!(5i32.overflowing_div_euclid(2), (2, false));
assert_eq!(i32::MIN.overflowing_div_euclid(-1), (i32::MIN, true));1.7.0 · Sourcepub fn overflowing_rem(self, rhs: i32) -> (i32, bool)
pub fn overflowing_rem(self, rhs: i32) -> (i32, bool)
Calculates the remainder when self is divided by rhs.
Returns a tuple of the remainder after dividing along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would occur then 0 is returned.
§Panics
This function will panic if rhs is zero.
§Examples
assert_eq!(5i32.overflowing_rem(2), (1, false));
assert_eq!(i32::MIN.overflowing_rem(-1), (0, true));1.38.0 · Sourcepub fn overflowing_rem_euclid(self, rhs: i32) -> (i32, bool)
pub fn overflowing_rem_euclid(self, rhs: i32) -> (i32, bool)
Overflowing Euclidean remainder. Calculates self.rem_euclid(rhs).
Returns a tuple of the remainder after dividing along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would occur then 0 is returned.
§Panics
This function will panic if rhs is zero.
§Examples
assert_eq!(5i32.overflowing_rem_euclid(2), (1, false));
assert_eq!(i32::MIN.overflowing_rem_euclid(-1), (0, true));1.7.0 · Sourcepub fn overflowing_neg(self) -> (i32, bool)
pub fn overflowing_neg(self) -> (i32, bool)
Negates self, overflowing if this is equal to the minimum value.
Returns a tuple of the negated version of self along with a boolean indicating whether an overflow
happened. If self is the minimum value (e.g., i32::MIN for values of type i32), then the
minimum value will be returned again and true will be returned for an overflow happening.
§Examples
assert_eq!(2i32.overflowing_neg(), (-2, false));
assert_eq!(i32::MIN.overflowing_neg(), (i32::MIN, true));1.7.0 · Sourcepub fn overflowing_shl(self, rhs: u32) -> (i32, bool)
pub fn overflowing_shl(self, rhs: u32) -> (i32, bool)
Shifts self left by rhs bits.
Returns a tuple of the shifted version of self along with a boolean indicating whether the shift value was larger than or equal to the number of bits. If the shift value is too large, then value is masked (N-1) where N is the number of bits, and this value is then used to perform the shift.
§Examples
assert_eq!(0x1i32.overflowing_shl(4), (0x10, false));
assert_eq!(0x1i32.overflowing_shl(36), (0x10, true));
assert_eq!(0x10i32.overflowing_shl(31), (0, false));1.7.0 · Sourcepub fn overflowing_shr(self, rhs: u32) -> (i32, bool)
pub fn overflowing_shr(self, rhs: u32) -> (i32, bool)
Shifts self right by rhs bits.
Returns a tuple of the shifted version of self along with a boolean indicating whether the shift value was larger than or equal to the number of bits. If the shift value is too large, then value is masked (N-1) where N is the number of bits, and this value is then used to perform the shift.
§Examples
assert_eq!(0x10i32.overflowing_shr(4), (0x1, false));
assert_eq!(0x10i32.overflowing_shr(36), (0x1, true));1.13.0 · Sourcepub fn overflowing_abs(self) -> (i32, bool)
pub fn overflowing_abs(self) -> (i32, bool)
Computes the absolute value of self.
Returns a tuple of the absolute version of self along with a boolean indicating whether an overflow
happened. If self is the minimum value
(e.g., i32::MIN for values of type i32),
then the minimum value will be returned again and true will be returned
for an overflow happening.
§Examples
assert_eq!(10i32.overflowing_abs(), (10, false));
assert_eq!((-10i32).overflowing_abs(), (10, false));
assert_eq!((i32::MIN).overflowing_abs(), (i32::MIN, true));1.34.0 · Sourcepub fn overflowing_pow(self, exp: u32) -> (i32, bool)
pub fn overflowing_pow(self, exp: u32) -> (i32, bool)
Raises self to the power of exp, using exponentiation by squaring.
Returns a tuple of the exponentiation along with a bool indicating whether an overflow happened.
§Examples
assert_eq!(3i32.overflowing_pow(4), (81, false));
assert_eq!(0_i32.overflowing_pow(0), (1, false));
assert_eq!(3i8.overflowing_pow(5), (-13, true));1.0.0 · Sourcepub fn pow(self, exp: u32) -> i32
pub fn pow(self, exp: u32) -> i32
Raises self to the power of exp, using exponentiation by squaring.
§Examples
let x: i32 = 2; // or any other integer type
assert_eq!(x.pow(5), 32);
assert_eq!(0_i32.pow(0), 1);1.84.0 · Sourcepub fn isqrt(self) -> i32
pub fn isqrt(self) -> i32
Returns the integer square root of the number, rounded down.
This function returns the principal (non-negative) square root.
For a given number n, although both x and -x satisfy x2 = n,
this function always returns the non-negative value.
§Panics
This function will panic if self is negative.
§Examples
assert_eq!(10i32.isqrt(), 3);1.38.0 · Sourcepub fn div_euclid(self, rhs: i32) -> i32
pub fn div_euclid(self, rhs: i32) -> i32
Calculates the quotient of Euclidean division of self by rhs.
This computes the integer q such that self = q * rhs + r, with
r = self.rem_euclid(rhs) and 0 <= r < abs(rhs).
In other words, the result is self / rhs rounded to the integer q
such that self >= q * rhs.
If self > 0, this is equal to rounding towards zero (the default in Rust);
if self < 0, this is equal to rounding away from zero (towards +/- infinity).
If rhs > 0, this is equal to rounding towards -infinity;
if rhs < 0, this is equal to rounding towards +infinity.
§Panics
This function will panic if rhs is zero or if self is Self::MIN
and rhs is -1. This behavior is not affected by the overflow-checks flag.
§Examples
let a: i32 = 7; // or any other integer type
let b = 4;
assert_eq!(a.div_euclid(b), 1); // 7 >= 4 * 1
assert_eq!(a.div_euclid(-b), -1); // 7 >= -4 * -1
assert_eq!((-a).div_euclid(b), -2); // -7 >= 4 * -2
assert_eq!((-a).div_euclid(-b), 2); // -7 >= -4 * 21.38.0 · Sourcepub fn rem_euclid(self, rhs: i32) -> i32
pub fn rem_euclid(self, rhs: i32) -> i32
Calculates the least nonnegative remainder of self when
divided by rhs.
This is done as if by the Euclidean division algorithm – given
r = self.rem_euclid(rhs), the result satisfies
self = rhs * self.div_euclid(rhs) + r and 0 <= r < abs(rhs).
§Panics
This function will panic if rhs is zero or if self is Self::MIN and
rhs is -1. This behavior is not affected by the overflow-checks flag.
§Examples
let a: i32 = 7; // or any other integer type
let b = 4;
assert_eq!(a.rem_euclid(b), 3);
assert_eq!((-a).rem_euclid(b), 1);
assert_eq!(a.rem_euclid(-b), 3);
assert_eq!((-a).rem_euclid(-b), 1);This will panic:
let _ = i32::MIN.rem_euclid(-1);Sourcepub fn div_floor(self, rhs: i32) -> i32
🔬This is a nightly-only experimental API. (int_roundings)
pub fn div_floor(self, rhs: i32) -> i32
int_roundings)Calculates the quotient of self and rhs, rounding the result towards negative infinity.
§Panics
This function will panic if rhs is zero or if self is Self::MIN
and rhs is -1. This behavior is not affected by the overflow-checks flag.
§Examples
#![feature(int_roundings)]
let a: i32 = 8;
let b = 3;
assert_eq!(a.div_floor(b), 2);
assert_eq!(a.div_floor(-b), -3);
assert_eq!((-a).div_floor(b), -3);
assert_eq!((-a).div_floor(-b), 2);Sourcepub fn div_ceil(self, rhs: i32) -> i32
🔬This is a nightly-only experimental API. (int_roundings)
pub fn div_ceil(self, rhs: i32) -> i32
int_roundings)Calculates the quotient of self and rhs, rounding the result towards positive infinity.
§Panics
This function will panic if rhs is zero or if self is Self::MIN
and rhs is -1. This behavior is not affected by the overflow-checks flag.
§Examples
#![feature(int_roundings)]
let a: i32 = 8;
let b = 3;
assert_eq!(a.div_ceil(b), 3);
assert_eq!(a.div_ceil(-b), -2);
assert_eq!((-a).div_ceil(b), -2);
assert_eq!((-a).div_ceil(-b), 3);Sourcepub fn next_multiple_of(self, rhs: i32) -> i32
🔬This is a nightly-only experimental API. (int_roundings)
pub fn next_multiple_of(self, rhs: i32) -> i32
int_roundings)If rhs is positive, calculates the smallest value greater than or
equal to self that is a multiple of rhs. If rhs is negative,
calculates the largest value less than or equal to self that is a
multiple of rhs.
§Panics
This function will panic if rhs is zero.
§Overflow behavior
On overflow, this function will panic if overflow checks are enabled (default in debug mode) and wrap if overflow checks are disabled (default in release mode).
§Examples
#![feature(int_roundings)]
assert_eq!(16_i32.next_multiple_of(8), 16);
assert_eq!(23_i32.next_multiple_of(8), 24);
assert_eq!(16_i32.next_multiple_of(-8), 16);
assert_eq!(23_i32.next_multiple_of(-8), 16);
assert_eq!((-16_i32).next_multiple_of(8), -16);
assert_eq!((-23_i32).next_multiple_of(8), -16);
assert_eq!((-16_i32).next_multiple_of(-8), -16);
assert_eq!((-23_i32).next_multiple_of(-8), -24);Sourcepub fn checked_next_multiple_of(self, rhs: i32) -> Option<i32>
🔬This is a nightly-only experimental API. (int_roundings)
pub fn checked_next_multiple_of(self, rhs: i32) -> Option<i32>
int_roundings)If rhs is positive, calculates the smallest value greater than or
equal to self that is a multiple of rhs. If rhs is negative,
calculates the largest value less than or equal to self that is a
multiple of rhs. Returns None if rhs is zero or the operation
would result in overflow.
§Examples
#![feature(int_roundings)]
assert_eq!(16_i32.checked_next_multiple_of(8), Some(16));
assert_eq!(23_i32.checked_next_multiple_of(8), Some(24));
assert_eq!(16_i32.checked_next_multiple_of(-8), Some(16));
assert_eq!(23_i32.checked_next_multiple_of(-8), Some(16));
assert_eq!((-16_i32).checked_next_multiple_of(8), Some(-16));
assert_eq!((-23_i32).checked_next_multiple_of(8), Some(-16));
assert_eq!((-16_i32).checked_next_multiple_of(-8), Some(-16));
assert_eq!((-23_i32).checked_next_multiple_of(-8), Some(-24));
assert_eq!(1_i32.checked_next_multiple_of(0), None);
assert_eq!(i32::MAX.checked_next_multiple_of(2), None);1.67.0 · Sourcepub fn ilog(self, base: i32) -> u32
pub fn ilog(self, base: i32) -> u32
Returns the logarithm of the number with respect to an arbitrary base, rounded down.
This method might not be optimized owing to implementation details;
ilog2 can produce results more efficiently for base 2,
and ilog10 can produce results more efficiently for base 10.
§Panics
This function will panic if self is less than or equal to zero,
or if base is less than 2.
§Examples
assert_eq!(5i32.ilog(5), 1);1.67.0 · Sourcepub fn checked_ilog(self, base: i32) -> Option<u32>
pub fn checked_ilog(self, base: i32) -> Option<u32>
Returns the logarithm of the number with respect to an arbitrary base, rounded down.
Returns None if the number is negative or zero, or if the base is not at least 2.
This method might not be optimized owing to implementation details;
checked_ilog2 can produce results more efficiently for base 2, and
checked_ilog10 can produce results more efficiently for base 10.
§Examples
assert_eq!(5i32.checked_ilog(5), Some(1));1.67.0 · Sourcepub fn checked_ilog2(self) -> Option<u32>
pub fn checked_ilog2(self) -> Option<u32>
Returns the base 2 logarithm of the number, rounded down.
Returns None if the number is negative or zero.
Note that for non-negative numbers, this is equivalent to
highest_one.
§Examples
assert_eq!(2i32.checked_ilog2(), Some(1));1.67.0 · Sourcepub fn checked_ilog10(self) -> Option<u32>
pub fn checked_ilog10(self) -> Option<u32>
Returns the base 10 logarithm of the number, rounded down.
Returns None if the number is negative or zero.
§Example
assert_eq!(10i32.checked_ilog10(), Some(1));1.0.0 · Sourcepub fn abs(self) -> i32
pub fn abs(self) -> i32
Computes the absolute value of self.
§Overflow behavior
The absolute value of
i32::MIN
cannot be represented as an
i32,
and attempting to calculate it will cause an overflow. This means
that code in debug mode will trigger a panic on this case and
optimized code will return
i32::MIN
without a panic. If you do not want this behavior, consider
using unsigned_abs instead.
§Examples
assert_eq!(10i32.abs(), 10);
assert_eq!((-10i32).abs(), 10);1.60.0 · Sourcepub fn abs_diff(self, other: i32) -> u32
pub fn abs_diff(self, other: i32) -> u32
Computes the absolute difference between self and other.
This function always returns the correct answer without overflow or panics by returning an unsigned integer.
§Examples
assert_eq!(100i32.abs_diff(80), 20u32);
assert_eq!(100i32.abs_diff(110), 10u32);
assert_eq!((-100i32).abs_diff(80), 180u32);
assert_eq!((-100i32).abs_diff(-120), 20u32);
assert_eq!(i32::MIN.abs_diff(i32::MAX), u32::MAX);1.0.0 · Sourcepub fn signum(self) -> i32
pub fn signum(self) -> i32
Returns a number representing sign of self.
0if the number is zero1if the number is positive-1if the number is negative
§Examples
assert_eq!(10i32.signum(), 1);
assert_eq!(0i32.signum(), 0);
assert_eq!((-10i32).signum(), -1);1.0.0 · Sourcepub fn is_positive(self) -> bool
pub fn is_positive(self) -> bool
Returns true if self is positive and false if the number is zero or
negative.
§Examples
assert!(10i32.is_positive());
assert!(!(-10i32).is_positive());1.0.0 · Sourcepub fn is_negative(self) -> bool
pub fn is_negative(self) -> bool
Returns true if self is negative and false if the number is zero or
positive.
§Examples
assert!((-10i32).is_negative());
assert!(!10i32.is_negative());1.32.0 · Sourcepub fn to_be_bytes(self) -> [u8; 4]
pub fn to_be_bytes(self) -> [u8; 4]
Returns the memory representation of this integer as a byte array in big-endian (network) byte order.
§Examples
let bytes = 0x12345678i32.to_be_bytes();
assert_eq!(bytes, [0x12, 0x34, 0x56, 0x78]);1.32.0 · Sourcepub fn to_le_bytes(self) -> [u8; 4]
pub fn to_le_bytes(self) -> [u8; 4]
Returns the memory representation of this integer as a byte array in little-endian byte order.
§Examples
let bytes = 0x12345678i32.to_le_bytes();
assert_eq!(bytes, [0x78, 0x56, 0x34, 0x12]);1.32.0 · Sourcepub fn to_ne_bytes(self) -> [u8; 4]
pub fn to_ne_bytes(self) -> [u8; 4]
Returns the memory representation of this integer as a byte array in native byte order.
As the target platform’s native endianness is used, portable code
should use to_be_bytes or to_le_bytes, as appropriate,
instead.
§Examples
let bytes = 0x12345678i32.to_ne_bytes();
assert_eq!(
bytes,
if cfg!(target_endian = "big") {
[0x12, 0x34, 0x56, 0x78]
} else {
[0x78, 0x56, 0x34, 0x12]
}
);Sourcepub fn clamp_magnitude(self, limit: u32) -> i32
🔬This is a nightly-only experimental API. (clamp_magnitude)
pub fn clamp_magnitude(self, limit: u32) -> i32
clamp_magnitude)Clamps this number to a symmetric range centred around zero.
The method clamps the number’s magnitude (absolute value) to be at most limit.
This is functionally equivalent to self.clamp(-limit, limit), but is more
explicit about the intent.
§Examples
#![feature(clamp_magnitude)]
assert_eq!(120i32.clamp_magnitude(100), 100);
assert_eq!((-120i32).clamp_magnitude(100), -100);
assert_eq!(80i32.clamp_magnitude(100), 80);
assert_eq!((-80i32).clamp_magnitude(100), -80);Sourcepub fn truncate<Target>(self) -> Targetwhere
i32: TruncateTarget<Target>,
🔬This is a nightly-only experimental API. (integer_widen_truncate)
pub fn truncate<Target>(self) -> Targetwhere
i32: TruncateTarget<Target>,
integer_widen_truncate)Truncate an integer to an integer of the same size or smaller, preserving the least significant bits.
§Examples
#![feature(integer_widen_truncate)]
assert_eq!(120i8, 120i32.truncate());
assert_eq!(-120i8, (-120i32).truncate());
assert_eq!(120i8, 376i32.truncate());Sourcepub fn saturating_truncate<Target>(self) -> Targetwhere
i32: TruncateTarget<Target>,
🔬This is a nightly-only experimental API. (integer_widen_truncate)
pub fn saturating_truncate<Target>(self) -> Targetwhere
i32: TruncateTarget<Target>,
integer_widen_truncate)Truncate an integer to an integer of the same size or smaller, saturating at numeric bounds instead of truncating.
§Examples
#![feature(integer_widen_truncate)]
assert_eq!(120i8, 120i32.saturating_truncate());
assert_eq!(-120i8, (-120i32).saturating_truncate());
assert_eq!(127i8, 376i32.saturating_truncate());
assert_eq!(-128i8, (-1000i32).saturating_truncate());Sourcepub fn checked_truncate<Target>(self) -> Option<Target>where
i32: TruncateTarget<Target>,
🔬This is a nightly-only experimental API. (integer_widen_truncate)
pub fn checked_truncate<Target>(self) -> Option<Target>where
i32: TruncateTarget<Target>,
integer_widen_truncate)Truncate an integer to an integer of the same size or smaller, returning None if the value
is outside the bounds of the smaller type.
§Examples
#![feature(integer_widen_truncate)]
assert_eq!(Some(120i8), 120i32.checked_truncate());
assert_eq!(Some(-120i8), (-120i32).checked_truncate());
assert_eq!(None, 376i32.checked_truncate::<i8>());
assert_eq!(None, (-1000i32).checked_truncate::<i8>());Sourcepub fn widen<Target>(self) -> Targetwhere
i32: WidenTarget<Target>,
🔬This is a nightly-only experimental API. (integer_widen_truncate)
pub fn widen<Target>(self) -> Targetwhere
i32: WidenTarget<Target>,
integer_widen_truncate)Widen to an integer of the same size or larger, preserving its value.
§Examples
#![feature(integer_widen_truncate)]
assert_eq!(120i128, 120i8.widen());
assert_eq!(-120i128, (-120i8).widen());Sourcepub fn saturating_cast<T>(self) -> Twhere
T: BoundedCastFromInt<i32>,
🔬This is a nightly-only experimental API. (integer_casts)
pub fn saturating_cast<T>(self) -> Twhere
T: BoundedCastFromInt<i32>,
integer_casts)Converts self to the target integer type, saturating at the numeric
bounds instead of overflowing.
§Examples
#![feature(integer_casts)]
assert_eq!(i8::MAX, i32::MAX.saturating_cast());
assert_eq!(i8::MIN, i32::MIN.saturating_cast());
assert_eq!(42u8, 42i32.saturating_cast());
assert_eq!(0u8, (-42i32).saturating_cast());Sourcepub fn wrapping_cast<T>(self) -> Twhere
T: BoundedCastFromInt<i32>,
🔬This is a nightly-only experimental API. (integer_casts)
pub fn wrapping_cast<T>(self) -> Twhere
T: BoundedCastFromInt<i32>,
integer_casts)Converts self to the target integer type, wrapping around at the
boundary of the target type.
§Examples
#![feature(integer_casts)]
assert_eq!(i32::MAX as i8, i32::MAX.wrapping_cast());
assert_eq!(i32::MIN as i8, i32::MIN.wrapping_cast());
assert_eq!(42u8, 42i32.wrapping_cast());
assert_eq!(u8::MAX - 41, (-42i32).wrapping_cast());Sourcepub fn checked_cast<T>(self) -> Option<T>where
T: CheckedCastFromInt<i32>,
🔬This is a nightly-only experimental API. (integer_casts)
pub fn checked_cast<T>(self) -> Option<T>where
T: CheckedCastFromInt<i32>,
integer_casts)Converts self to the target integer type, returning None if the value
is not representable by the target type.
§Examples
#![feature(integer_casts)]
assert_eq!(Some(42u8), 42i32.checked_cast());
assert_eq!((-42i32).checked_cast::<u8>(), None);Sourcepub fn strict_cast<T>(self) -> Twhere
T: CheckedCastFromInt<i32>,
🔬This is a nightly-only experimental API. (integer_casts)
pub fn strict_cast<T>(self) -> Twhere
T: CheckedCastFromInt<i32>,
integer_casts)Converts self to the target integer type, panicking if the value
is not representable by the target type.
§Panics
This function will panic if the value is not representable by the target type.
§Examples
#![feature(integer_casts)]
assert_eq!(42u8, 42i32.strict_cast());The following will panic:
#![feature(integer_casts)]
let _ = (-42i32).strict_cast::<u8>();Sourcepub unsafe fn unchecked_cast<T>(self) -> Twhere
T: CheckedCastFromInt<i32>,
🔬This is a nightly-only experimental API. (integer_casts)
pub unsafe fn unchecked_cast<T>(self) -> Twhere
T: CheckedCastFromInt<i32>,
integer_casts)Converts self to the target integer type, assuming the value is
representable by the target type.
§Safety
This results in undefined behavior if the integer value of self is bigger than T::MAX,
or smaller than T::MIN, where T is the target type.
1.87.0 · Sourcepub fn midpoint(self, rhs: i32) -> i32
pub fn midpoint(self, rhs: i32) -> i32
Calculates the midpoint (average) between self and rhs.
midpoint(a, b) is (a + b) / 2 as if it were performed in a
sufficiently-large signed integral type. This implies that the result is
always rounded towards zero and that no overflow will ever occur.
§Examples
assert_eq!(0i32.midpoint(4), 2);
assert_eq!((-1i32).midpoint(2), 0);
assert_eq!((-7i32).midpoint(0), -3);
assert_eq!(0i32.midpoint(-7), -3);
assert_eq!(0i32.midpoint(7), 3);Sourcepub fn widening_mul(self, rhs: i32) -> i64
🔬This is a nightly-only experimental API. (widening_mul)
pub fn widening_mul(self, rhs: i32) -> i64
widening_mul)Widening multiplication. Computes self * rhs, widening to a larger integer.
The returned value is always exact and can never overflow.
Note that this method is semantically equivalent to carrying_mul with a
carry of zero, with the latter instead returning a tuple denoting the low and
high parts of the result. Consider using it instead if you need
interoperability with other big int helper functions, or if this method isn’t
available for a given type.
§Examples
#![feature(widening_mul)]
assert_eq!(i32::MAX.widening_mul(0_i32), 0);
assert_eq!(i32::MAX.widening_mul(i32::MAX), i32::MAX as i64 * i32::MAX as i64);1.98.0 · Sourcepub fn format_into(self, buf: &mut NumBuffer<i32>) -> &str
pub fn format_into(self, buf: &mut NumBuffer<i32>) -> &str
Formats this integer as a signed decimal number, using the memory pointed to by
buf as storage for the returned string slice.
This method can be used to convert integers to strings without involving the
dynamic dispatch that using Display would.
This may be more efficient in situations where fmt is not otherwise used.
§Examples
use core::fmt::NumBuffer;
let n = 0i32;
let mut buf = NumBuffer::new();
assert_eq!(n.format_into(&mut buf), "0");
let n1 = 32i32;
assert_eq!(n1.format_into(&mut buf), "32");
let n2 = i32::MAX;
assert_eq!(n2.format_into(&mut buf), i32::MAX.to_string());Trait Implementations§
Source§impl Clone for TicksFrozen
impl Clone for TicksFrozen
Source§impl Component for TicksFrozen
impl Component for TicksFrozen
Source§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
Source§type Mutability = Mutable
type Mutability = Mutable
Component<Mutability = Mutable>],
while immutable components will instead have [Component<Mutability = Immutable>]. Read moreSource§fn register_required_components(
_requiree: ComponentId,
required_components: &mut RequiredComponentsRegistrator<'_, '_>,
)
fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )
Source§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
Source§fn relationship_accessor() -> Option<ComponentRelationshipAccessor<Self>>
fn relationship_accessor() -> Option<ComponentRelationshipAccessor<Self>>
ComponentRelationshipAccessor] required for working with relationships in dynamic contexts. Read more§fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_add [ComponentHook] for this [Component] if one is defined.§fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_insert [ComponentHook] for this [Component] if one is defined.§fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_discard [ComponentHook] for this [Component] if one is defined.§fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_remove [ComponentHook] for this [Component] if one is defined.§fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_despawn [ComponentHook] for this [Component] if one is defined.§fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
EntityMapper]. This is used to remap entities in contexts like scenes and entity cloning.
When deriving [Component], this is populated by annotating fields containing entities with #[entities] Read more§const HAS_SUMMARY_TICK: bool = false
const HAS_SUMMARY_TICK: bool = false
Source§impl Deref for TicksFrozen
impl Deref for TicksFrozen
Source§impl DerefMut for TicksFrozen
impl DerefMut for TicksFrozen
Source§impl PartialEq for TicksFrozen
impl PartialEq for TicksFrozen
impl StructuralPartialEq for TicksFrozen
Auto Trait Implementations§
impl Freeze for TicksFrozen
impl RefUnwindSafe for TicksFrozen
impl Send for TicksFrozen
impl Sync for TicksFrozen
impl Unpin for TicksFrozen
impl UnsafeUnpin for TicksFrozen
impl UnwindSafe for TicksFrozen
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut ComponentsRegistrator<'_>, ) -> impl Iterator<Item = ComponentId> + use<C>
§fn get_component_ids(
components: &Components,
) -> impl Iterator<Item = Option<ComponentId>>
fn get_component_ids( components: &Components, ) -> impl Iterator<Item = Option<ComponentId>>
Bundle]’s component ids. This will be None if the component has not been registered.§impl<C> BundleFromComponents for Cwhere
C: Component,
impl<C> BundleFromComponents for Cwhere
C: Component,
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ConditionalSend for Twhere
T: Send,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
§unsafe fn get_components(
ptr: MovingPtr<'_, C>,
func: &mut impl FnMut(StorageType, OwningPtr<'_>),
) -> <C as DynamicBundle>::Effect
unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect
§unsafe fn apply_effect(
_ptr: MovingPtr<'_, MaybeUninit<C>>,
_entity: &mut EntityWorldMut<'_>,
)
unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Template for T
impl<T> Template for T
§fn build_template(
&self,
_context: &mut TemplateContext<'_, '_>,
) -> Result<<T as Template>::Output, BevyError>
fn build_template( &self, _context: &mut TemplateContext<'_, '_>, ) -> Result<<T as Template>::Output, BevyError>
entity context to produce a [Template::Output].§fn clone_template(&self) -> T
fn clone_template(&self) -> T
Clone.§impl<T> TypeData for T
impl<T> TypeData for T
§fn clone_type_data(&self) -> Box<dyn TypeData>
fn clone_type_data(&self) -> Box<dyn TypeData>
self.