Binary encoding
Link:
Перевод и работа с двоичными числами
Работа с двоичными числами как со строками
Макрос format! имеет возможность конвертации {:b} числа в двоичное представление при выводе:
fn count_bits(n: i64) -> u32 {
format!("{:b}", n).matches('1').count() as u32
} // посчитать количество '1' битов в числе слева-направо
fn main() {
println!("1234 => {}", count_bits(1234));
} // 1234 => 5
Спец-функции
Можно посчитать количество ‘1’ битов в числе с помощью функции count_ones():
fn count_bits2(n: i64) -> u32 {
n.count_ones()
} // 1234 => 5
Bitwise Operator
Конвертация через побитовый сдвиг числа:
fn bitwise_binary(mut num: u32) -> String {
let mut result = String::new();
let mut started = false;
for i in (0..32).rev() {
let bit = (num >> i) & 1; // побитовый сдвиг
if bit == 1 {
started = true; }
if started {
result.push_str(&bit.to_string()); } }
if result.is_empty() { result.push('0'); } result }
fn main() {
println!("Binary (45): {}", bitwise_binary(45));
} // Binary (45): 101101
Через итераторы
fn iterator_method(mut num: u32) -> String {
if num == 0 {
return "0".to_string();
}
let mut bits = vec![];
while num > 0 {
bits.push((num % 2).to_string());
num /= 2;
}
bits.iter().rev().cloned().collect()
}
fn main() {
println!("Binary (9): {}", iterator_method(9));
} // Binary (9): 1001