🚀

Rust で2進数にしたときの桁数を求める

2021/09/18に公開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
GitHubで編集を提案

Discussion

とがとが

実は各種整数型には .leading_zeros() というメソッドがあるため,これを型のビット長から引くと 2 進法の桁数が得られます.

fn blen(v: i64) -> u32 {
    64 - v.leading_zeros()
}

あと,v がゼロでないと分かっていれば,(現在 unstable ですが).log2() も使えます.

#![feature(int_log)]

fn blen(v: i64) -> u32 {
    v.log2() + 1
}
anozonanozon

ありがとうございます!
leading_zeros を使うこちらのほうがスマートで log2 は理想的ですね
勉強になります
0の桁数も考えていませんでした