1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
use primitive_types::U256; pub fn log2floor(value: U256) -> u64 { assert!(value != U256::zero()); let mut l: u64 = 256; for i in 0..4 { let i = 3 - i; if value.0[i] == 0u64 { l -= 64; } else { l -= value.0[i].leading_zeros() as u64; if l == 0 { return l } else { return l - 1; } } } return l; }