如何使用前导零打印二进制的整数?

Nea*_*rdt 13 rust

我正在做一些小事,我想打印我的u16中的所有位.

let flags = 0b0000000000101100u16;
println!("flags: {:#b}", flags);
Run Code Online (Sandbox Code Playgroud)

这打印flags: 0b101100.

如何打印flags: 0b0000000000101100

Nea*_*rdt 19

let flags = 0b0000000000101100u16;
println!("flags: {:#018b}", flags);
Run Code Online (Sandbox Code Playgroud)

018用零到18的宽度的宽度包括焊盘0b(长度= 2)加一个U16(长度= 16)所以18 = 2 + 16.它必须介于 #之间b.

Rust的fmt文档解释了前导零基数格式,但没有说明如何组合它们.

这是u8,u16和u32:

//                       Width  0       8      16      24      32
//                              |       |       |       |       |
println!("{:#010b}", 1i8);  // 0b00000001
println!("{:#018b}", 1i16); // 0b0000000000000001
println!("{:#034b}", 1i32); // 0b00000000000000000000000000000001
Run Code Online (Sandbox Code Playgroud)

  • 使用“0b{:08b}”代替“{:#010b}”怎么样?推理“8”比推理“10”更容易。 (17认同)
  • @AtulGopinathan 一个板条箱很方便,但不是必需的;而不是 `println!("{:08b}", my_u8_value)`,请尝试 `println!("{:04b}_{:04b}", my_u8_value >> 4, my_u8_value & 0x0f)` (2认同)

Jon*_*nas 6

我开始更喜欢这些模式:

println!("{:08b}", 1i8);
println!("{:016b}", 12000u16);
println!("{:032b}", 624485u32);
Run Code Online (Sandbox Code Playgroud)

它将打印:

00000001
0010111011100000
00000000000010011000011101100101
Run Code Online (Sandbox Code Playgroud)