Crate extprim [−] [src]
This crate provides some extra simple types.
u128 and i128
Support signed and unsigned 128-bit integers. Also standard primitive operations are supported.
These are mainly needed where explicit 128-bit integer types are required. If the purpose is to operate on "very large integers", the bigint library may be more suitable.
#[macro_use] extern crate extprim_literals; extern crate extprim; use std::str::FromStr; use extprim::i128::i128; fn main() { let a = i128::from_str("100000000000000000000000000000000000000").unwrap(); // convert string to u128 or i128 let b = i128::new(10).pow(38); // 64-bit integers can be directly new'ed assert_eq!(a, b); let c = i128::from_parts(5421010862427522170, 687399551400673280); // represent using the higher- and lower-64-bit parts let d = c - a; // standard operators like +, -, *, /, %, etc. work as expected. assert_eq!(d, i128::zero()); const e: i128 = i128!(100000000000000000000000000000000000000); // use the literal macros assert_eq!(a, e); }
Literal macros
The extra primitive types can be created via the literal macros using the extprim_literals
compiler plugin in
nightly, or with syntex in stable. Please check the documentation of
extprim_literals
for details.
#![feature(plugin)] #![plugin(extprim_literals)] extern crate extprim; fn main() { let a = u128!(0xffeeddcc_bbaa9988_77665544_33221100); let b = u128!(73); let result = a / b; let expected = u128!(4_660_183_619_323_730_626_856_278_982_251_165_334); assert_eq!(a / b, expected); }
Modules
i128 |
Signed 128-bit integer. |
traits |
Traits for conversion between the extra primitive types. |
u128 |
Unsigned 128-bit integer. |