2進法とか16進法、36進法で桁の位があがったり、10進数に変換したりとか、理屈ではわかっても、テストで計算はできてもなんとなくすとんとわかった気がしません。
そんなときにも活躍するのがJ言語です。
i.20 NB.ふつうは10進法です 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2b101 NB.101は2進数では5 5 3b101 NB.101は3進数では10 10 36b101 NB.101は36進数では1297 1297 36babc NB.abcは36進数では13368 13368 36bz 35 16bff 255 2 #.1 0 1 NB.#.という動詞で変換もできます 5 3 #.1 0 1 10 36 #.1 0 1 1297 36 #. a b c
domain error |
36 #.a b c |
とりあえずこんな感じですが、逆に2進数で表したり、36進数で表したりしたいときはどうするか。
C言語やRubyではprint文でフォーマットして文字列にするのだったよなぁと思い出しつつ、たぶんそのやり方もあると思う。
逆関数(^:_1)を使ってできるかどうかと思いついたので実験です。
2 ( #.^:_1) 5 1 0 1 3 ( #.^:_1) 5 1 0 1 3 ( #.^:_1) 10 1 2 3 ( #.^:_1) 10 1 0 1 36 ( #.^:_1) 1297 1 0 1 36 ( #.^:_1) 13366 10 11 10 16 ( #.^:_1) 255 15 15
なんか工夫すればできそうですね。とりあえず、数字だけ1桁の結果なら次のように出来ます。
$ ,":"0 (#.^:_1) 25 NB.1 1 0 0 1という配列にして、それを文字に変換 11001