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