rust/example/std_example.rs

37 lines
1.3 KiB
Rust
Raw Normal View History

2019-02-16 15:42:20 +01:00
#![feature(core_intrinsics)]
2019-02-11 19:40:07 +01:00
use std::io::Write;
2019-07-17 20:45:54 +02:00
use std::intrinsics;
fn checked_div_i128(lhs: i128, rhs: i128) -> Option<i128> {
if rhs == 0 || (lhs == -170141183460469231731687303715884105728 && rhs == -1) {
None
} else {
Some(unsafe { intrinsics::unchecked_div(lhs, rhs) })
}
}
fn checked_div_u128(lhs: u128, rhs: u128) -> Option<u128> {
match rhs {
0 => None,
rhs => Some(unsafe { intrinsics::unchecked_div(lhs, rhs) })
}
}
2019-02-11 19:40:07 +01:00
fn main() {
2019-07-24 17:16:31 +02:00
assert_eq!(0b0000000000000000000000000010000010000000000000000000000000000000_0000000000100000000000000000000000001000000000000100000000000000u128.leading_zeros(), 26);
assert_eq!(0b0000000000000000000000000010000000000000000000000000000000000000_0000000000000000000000000000000000001000000000000000000010000000u128.trailing_zeros(), 7);
2019-07-17 20:45:54 +02:00
checked_div_i128(0i128, 2i128);
checked_div_u128(0u128, 2u128);
2019-07-07 18:08:38 +02:00
assert_eq!(1u128 + 2, 3);
2019-07-24 13:16:36 +02:00
// overflow panic
// 0xFEDCBA987654321123456789ABCDEFu128 + 0xFEDCBA987654321123456789ABCDEFu128;
println!("{}", 0b100010000000000000000000000000000u128 >> 10);
println!("{}", 0xFEDCBA987654321123456789ABCDEFu128 >> 64);
println!("{} >> 64 == {}", 0xFEDCBA987654321123456789ABCDEFu128 as i128, 0xFEDCBA987654321123456789ABCDEFu128 as i128 >> 64);
println!("{}", 353985398u128 * 932490u128);
}