Bashでn進数を扱うにはを見て、zshでもやってみた。微妙に違うみたい。
# 2進数
echo $(( 2#101 )) # 5
echo $(( 2#101 & 2#100 )) # 4 (=2#100)
# 8進数
# zshはデフォルトでは0から始まる数値を8進数とみなさない
echo $(( 0744 )) # 744
# OCTAL_ZEROESをセットすると0から始まる数値を8進数として扱える
setopt OCTAL_ZEROES
echo $(( 0744 )) # 484
# 8進数(続き)
echo $(( 8#744 )) # 484
echo $(( 8#0744 )) # 484
# 16進数
echo $(( 0xff )) # 255
echo $(( 16#ff )) # 255
# 36進数
echo $(( 36#10 )) # 36
echo $(( 36#zz )) # 1295
# zshの場合は大文字小文字区別なしで36進数までらしい
echo $(( 37#10 )) # invalid base (must be 2 to 36 inclusive): 37
#----------------------------
# zshは数値に基数を設定できる
# 16進数で表現
# 出力は上記のインプットとして使える形式になる
echo $(( [#16] 255 )) # 16#FF
# "##"にすると基数の情報なしになる
echo $(( [##16] 255 )) # FF
# 2進数から16進数へ
echo $(( [##16] 2#1011 )) # B
# 基数を設定した変数
typeset -i 16 x
x=255
echo $x # 16#FF
詳しくはman zshmisc
のARITHMETIC EVALUATION
を。
Arithmetic Evaluation
http://zsh.sourceforge.net/Doc/Release/Arithmetic-Evaluation.html