🚀
Rust で2進数にしたときの桁数を求める
usize で取得する関数です。
closure 版
let blen = |v: u64| -> usize { format!("{:b}", v).to_string().len() };
fn 版
fn blen(v: i64) -> usize {
format!("{:b}", v).to_string().len()
}
blen(100)
// 7
blen(0b0000111100001111)
// 12
usize で取得する関数です。
closure 版
let blen = |v: u64| -> usize { format!("{:b}", v).to_string().len() };
fn 版
fn blen(v: i64) -> usize {
format!("{:b}", v).to_string().len()
}
blen(100)
// 7
blen(0b0000111100001111)
// 12
Discussion
実は各種整数型には
.leading_zeros()
というメソッドがあるため,これを型のビット長から引くと 2 進法の桁数が得られます.あと,
v
がゼロでないと分かっていれば,(現在 unstable ですが).log2()
も使えます.ありがとうございます!
leading_zeros を使うこちらのほうがスマートで log2 は理想的ですね
勉強になります
0の桁数も考えていませんでした