10進値を2進表現に変換するときは、次のコマンドを使用できます。
val=12
D2B=({0..1}{0..1}{0..1}{0..1}{0..1})
echo ${D2B[$val]}
これが動作している間になぜこれが起こるのか理解しているかわかりません。誰かがそれを説明したり、それを行うことができるリソースを教えてくれたらいいでしょう。
ベストアンサー1
サポート拡張in form は{x..y}
x から y までの範囲で可能なすべての文字を提供します。この場合、 と{0..1}
が提供されます。 2 つのブロックを組み合わせると、4 つの可能な値が生成されます。0
1
2^2
$ printf %s\\n {0..1}{0..1}
00
01
10
11
5つの部分を組み合わせると、2^5
32の可能なバイナリ値(0から32まで)が得られます。
$ printf %s\\n {0..1}{0..1}{0..1}{0..1}{0..1}
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
.....
11110
11111
すべての値をD2B
バイナリ値に対応する10進インデックスを使用して配列に保存します。インデックス12にアクセスすると、${D2B[$val]}
10進数12のバイナリ値が返されます。
実際には、以下を使用して短縮できます{x,y}
。
D2B=({0,1}{0,1}{0,1}{0,1}{0,1})