Trait num::traits::PrimInt [-] [+] [src]

pub trait PrimInt: Sized + Copy + Num + NumCast + Bounded + PartialOrd + Ord + Eq + Not<Output=Self> + BitAnd<Output=Self> + BitOr<Output=Self> + BitXor<Output=Self> + Shl<usize, Output=Self> + Shr<usize, Output=Self> + CheckedAdd<Output=Self> + CheckedSub<Output=Self> + CheckedMul<Output=Self> + CheckedDiv<Output=Self> + Saturating {
    fn count_ones(self) -> u32;
    fn count_zeros(self) -> u32;
    fn leading_zeros(self) -> u32;
    fn trailing_zeros(self) -> u32;
    fn rotate_left(self, n: u32) -> Self;
    fn rotate_right(self, n: u32) -> Self;
    fn swap_bytes(self) -> Self;
    fn from_be(x: Self) -> Self;
    fn from_le(x: Self) -> Self;
    fn to_be(self) -> Self;
    fn to_le(self) -> Self;
    fn pow(self, exp: u32) -> Self;
}

Required Methods

fn count_ones(self) -> u32

Returns the number of ones in the binary representation of self.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0b01001100u8; assert_eq!(n.count_ones(), 3); }
use num::traits::PrimInt;

let n = 0b01001100u8;

assert_eq!(n.count_ones(), 3);

fn count_zeros(self) -> u32

Returns the number of zeros in the binary representation of self.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0b01001100u8; assert_eq!(n.count_zeros(), 5); }
use num::traits::PrimInt;

let n = 0b01001100u8;

assert_eq!(n.count_zeros(), 5);

fn leading_zeros(self) -> u32

Returns the number of leading zeros in the binary representation of self.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0b0101000u16; assert_eq!(n.leading_zeros(), 10); }
use num::traits::PrimInt;

let n = 0b0101000u16;

assert_eq!(n.leading_zeros(), 10);

fn trailing_zeros(self) -> u32

Returns the number of trailing zeros in the binary representation of self.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0b0101000u16; assert_eq!(n.trailing_zeros(), 3); }
use num::traits::PrimInt;

let n = 0b0101000u16;

assert_eq!(n.trailing_zeros(), 3);

fn rotate_left(self, n: u32) -> Self

Shifts the bits to the left by a specified amount amount, n, wrapping the truncated bits to the end of the resulting integer.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0x0123456789ABCDEFu64; let m = 0x3456789ABCDEF012u64; assert_eq!(n.rotate_left(12), m); }
use num::traits::PrimInt;

let n = 0x0123456789ABCDEFu64;
let m = 0x3456789ABCDEF012u64;

assert_eq!(n.rotate_left(12), m);

fn rotate_right(self, n: u32) -> Self

Shifts the bits to the right by a specified amount amount, n, wrapping the truncated bits to the beginning of the resulting integer.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0x0123456789ABCDEFu64; let m = 0xDEF0123456789ABCu64; assert_eq!(n.rotate_right(12), m); }
use num::traits::PrimInt;

let n = 0x0123456789ABCDEFu64;
let m = 0xDEF0123456789ABCu64;

assert_eq!(n.rotate_right(12), m);

fn swap_bytes(self) -> Self

Reverses the byte order of the integer.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0x0123456789ABCDEFu64; let m = 0xEFCDAB8967452301u64; assert_eq!(n.swap_bytes(), m); }
use num::traits::PrimInt;

let n = 0x0123456789ABCDEFu64;
let m = 0xEFCDAB8967452301u64;

assert_eq!(n.swap_bytes(), m);

fn from_be(x: Self) -> Self

Convert an integer from big endian to the target's endianness.

On big endian this is a no-op. On little endian the bytes are swapped.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0x0123456789ABCDEFu64; if cfg!(target_endian = "big") { assert_eq!(u64::from_be(n), n) } else { assert_eq!(u64::from_be(n), n.swap_bytes()) } }
use num::traits::PrimInt;

let n = 0x0123456789ABCDEFu64;

if cfg!(target_endian = "big") {
    assert_eq!(u64::from_be(n), n)
} else {
    assert_eq!(u64::from_be(n), n.swap_bytes())
}

fn from_le(x: Self) -> Self

Convert an integer from little endian to the target's endianness.

On little endian this is a no-op. On big endian the bytes are swapped.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0x0123456789ABCDEFu64; if cfg!(target_endian = "little") { assert_eq!(u64::from_le(n), n) } else { assert_eq!(u64::from_le(n), n.swap_bytes()) } }
use num::traits::PrimInt;

let n = 0x0123456789ABCDEFu64;

if cfg!(target_endian = "little") {
    assert_eq!(u64::from_le(n), n)
} else {
    assert_eq!(u64::from_le(n), n.swap_bytes())
}

fn to_be(self) -> Self

Convert self to big endian from the target's endianness.

On big endian this is a no-op. On little endian the bytes are swapped.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0x0123456789ABCDEFu64; if cfg!(target_endian = "big") { assert_eq!(n.to_be(), n) } else { assert_eq!(n.to_be(), n.swap_bytes()) } }
use num::traits::PrimInt;

let n = 0x0123456789ABCDEFu64;

if cfg!(target_endian = "big") {
    assert_eq!(n.to_be(), n)
} else {
    assert_eq!(n.to_be(), n.swap_bytes())
}

fn to_le(self) -> Self

Convert self to little endian from the target's endianness.

On little endian this is a no-op. On big endian the bytes are swapped.

Examples

extern crate num; fn main() { use num::traits::PrimInt; let n = 0x0123456789ABCDEFu64; if cfg!(target_endian = "little") { assert_eq!(n.to_le(), n) } else { assert_eq!(n.to_le(), n.swap_bytes()) } }
use num::traits::PrimInt;

let n = 0x0123456789ABCDEFu64;

if cfg!(target_endian = "little") {
    assert_eq!(n.to_le(), n)
} else {
    assert_eq!(n.to_le(), n.swap_bytes())
}

fn pow(self, exp: u32) -> Self

Raises self to the power of exp, using exponentiation by squaring.

Examples

extern crate num; fn main() { use num::traits::PrimInt; assert_eq!(2i32.pow(4), 16); }
use num::traits::PrimInt;

assert_eq!(2i32.pow(4), 16);

Implementors