>HSPの各命令(repeat等)を使わず4バイトの数値として基本的な計算式
0ビット目、1ビット目、・・・22ビット目を得たい、
すなわち、
1=2^0・・・0ビット目が立ってる
2=2^1・・・1ビット目が立ってる
4=2^2・・・2ビット目が立ってる
・・・
2^a=Xとしたとき、
a=log2 X
とあらわす。
log2 Xを解けば○ビット目が立っているかがわかる。
ただしHSPには2を底とする対数関数がないため、
対数の底の変換公式を用いる。
すると、
log2 X=log10 X/log10 2
と表せる。
log10は常用対数といい、HSPには常用対数関数logfがある。
log10 X = logf(X)
である。
#module
#defcfunc onbit int i
return logf(i)/logf(2) // 対数の底の変換公式(数学)
#global
mes onbit(1)
mes onbit(2)
mes onbit(3) // onbitが2つあるから変な数字になるのは当然
mes onbit($400000)
ただし、この方法はオンビットが1つの場合にしか使えないのは、上記の説明でわかるだろう。
よって、オンビットがいくつあって、「どこ」と「どこ」が立っているのかを得たいなら、
HSPの各命令(repeat等)を使わざるを得ない。