11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

フォーマット文字列で、整数を「2進数ゼロ詰めn桁」で表示する

Last updated at Posted at 2018-10-04

#フォーマット文字列
RustやPythonでは、フォーマット文字列を使って、複雑なフォーマット指定で整数や浮動小数点数などを表示させることができます。
例えば、フォーマット文字列に {:0>8b} を使うと「2進数ゼロ詰め8桁」が実現できます。今回は、このフォーマットの 8 の部分を変数に置き換えたい、という話をします。

なお、Pythonの場合は、フォーマット文字列を動的に作ることができるので、このへんの話を覚えるよりも、("{:0>" + str(n) + "b}").format(...) とした方が楽かもしれません。
けど、一応、静的なフォーマット文字列でもできるということでご紹介します。

とてもつらいことに、RustとPythonで、これを実現するためのフォーマット文字列は異なります

#Rustの場合

Rust
fn main() {
    let kazu = 15;
    let keta = 6;
    println!("{:0>haba$b}", kazu, haba = keta);
    // または、以下でも可
    println!("{:0>1$b}", kazu, keta);
}

:0> に続けて、パラメータ名を指定し、$で区切ってから、表示形式を指定します。
そんなのどこに書いてあったのか、という話ですが。ここらへんを頑張って読むと書いてあります。幅だけじゃなく、浮動小数点数の精度も同じく、引数の番号または名前の後に$を付けるとパラメータを指定したことになる、と分かります。

#Pythonの場合

Python
kazu = 15
keta = 6
"{:0>{haba}b}".format(kazu, haba=keta)
# もしくは
"{0:0>{1}b}".format(kazu, keta)
# これでもよい
"{:0>{}b}".format(kazu, keta)

ドキュメントのBNC記法っぽいものを眺めても、あまりピンとこないのですが、BNC記法じゃないところに「ネストできるよ」と書いてありました。そして例として載ってました
さらには、こんな闇みたいなこともできます。

闇フォーマット
# {:>012x}と同じ
"{:{}2{}}".format(10, ">01", "x")

便利ですね♪

11
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?