Module malachite_nz::natural::arithmetic::shr

source ·
Expand description

Right-shifting a Natural (dividing it by a power of 2).

§shr

use malachite_base::num::arithmetic::traits::Pow;
use malachite_base::num::basic::traits::Zero;
use malachite_nz::natural::Natural;

assert_eq!((Natural::ZERO >> 10u8), 0);
assert_eq!((Natural::from(492u32) >> 2u32), 123);
assert_eq!((Natural::from(10u32).pow(12) >> 10u64), 976562500);
assert_eq!((&Natural::ZERO >> 10u8), 0);
assert_eq!((&Natural::from(492u32) >> 2u32), 123);
assert_eq!((&Natural::from(10u32).pow(12) >> 10u64), 976562500);

assert_eq!((Natural::ZERO >> 10i8), 0);
assert_eq!((Natural::from(492u32) >> 2i16), 123);
assert_eq!((Natural::from(10u32).pow(12) >> 10i32), 976562500);
assert_eq!((Natural::ZERO >> -10i64), 0);
assert_eq!((Natural::from(123u32) >> -2i8), 492);
assert_eq!(
    (Natural::from(123u32) >> -100i16).to_string(),
    "155921023828072216384094494261248"
);
assert_eq!((&Natural::ZERO >> -10i8), 0);
assert_eq!((&Natural::from(123u32) >> -2i16), 492);
assert_eq!(
    (&Natural::from(123u32) >> -100i32).to_string(),
    "155921023828072216384094494261248"
);
assert_eq!((&Natural::ZERO >> 10i64), 0);
assert_eq!((&Natural::from(492u32) >> 2i8), 123);
assert_eq!((&Natural::from(10u32).pow(12) >> 10i16), 976562500);

§shr_assign

use malachite_base::num::basic::traits::One;
use malachite_nz::natural::Natural;

let mut x = Natural::from(1024u32);
x >>= 1u8;
x >>= 2u16;
x >>= 3u32;
x >>= 4u64;
assert_eq!(x, 1);

let mut x = Natural::ONE;
x >>= -1i8;
x >>= -2i16;
x >>= -3i32;
x >>= -4i64;
assert_eq!(x, 1024);

let mut x = Natural::from(1024u32);
x >>= 1i8;
x >>= 2i16;
x >>= 3i32;
x >>= 4i64;
assert_eq!(x, 1);