bcメモ。
コンソール用電卓が欲しくなってきたので、bcを試してみた。
はじめてのbc
% bc -q 1 + 2 3 obase = 2 2 ^ 10 10000000000 ibace = 8 755 1011110011 quit
- ibase,obaseで基数の変更が出来る。
manのサンプルが凄いっす。電卓の域を遥かに越えてる・・・。
2進数ダンプ
昨日の2進ダンプもワンライナで。
% cat 123.txt 123 456 789 % (echo 'obase = 2' && cat 123.txt) | bc 1111011 111001000 1100010101
いい感じ。
シェルスクリプトにしとこう。
22() { (echo 'obase = 2' && cat -) | bc }
「to 2進数」なので「22」。適当。
% cat 123.txt | 22 1111011 111001000 1100010101
123を2進数にすると1111011
Rubyで基数変換
こういう時はRubyの出番。
% echo '0x123' | ruby -e 'STDIN.each{|l| printf "%b\n", l.to_i(0)}' 100100011
メモ。
- "0x123".to_i(0)で、基数の自動判別が効くようになる。
- printf "%b"で2進数表示。
22コマンドを書き直す。
22() { ruby -e 'STDIN.each{|l| printf "%b\n", l.to_i(0)}' }
% echo '0x123' | 22 100100011
やっぱりRubyダネ。
Vimで電卓
:command! -nargs=+ Calc :ruby print <args> :ruby include Math :Calc 1 + 2 3 :Calc sin(PI / 2) 1.0
やばすぎ。
Rubyの電卓が激しく便利なので
rcコマンドを作ってみた。
rc() { ruby -e 'include Math;STDIN.each{|l| puts eval(l)}' }
Ruby電卓の威力。
% rc 1 + 2 3 1 << 10 1024 sin(PI/2) 1.0 sprintf "%b", 0755 111101101 sprintf "%o", 0755 & ~0111 644 exit
・・・強力杉。
参考
- Manpage of bc
- Manpage of DC
- プログラミングRuby 2nd ライブラリ編 Kernel,String
- Tip #1235 - Builtin Scientific Calculator : vim online