たくさんの質問を頂きましたが、ややこしいところなのでゆっくり進みますね。その中で分からない事があれば、いつでも質問してください。
あと、変換関数再掲します。
def u2i(u16%) ' 符号なしから符号ありに変換
return ((u16%+32768) and 65535)-32768
end
def i2u(i16%) '符号ありから符号なしに変換
retrun i16% and 65535
end
符号ありの整数 k を文字列に入れる場合
a$[i] = chr$(i2u(k))
それを読む場合
k = u2i(asc(a$[i]))
再掲した関数を使うと、負の数含む整数と一文字とで相互変換が可能になりました。
ただしそれが成立するのは -2^15 <= 整数 <= 2^15-1 の範囲に限ります。
整数が「16bit符号付き整数で表せる範囲」にあるならば成立。
言い換えれば、「16bit符号付き整数と一文字は相互変換可能」
for i% = -32778 to 32777
if i% != u2i(asc(chr$(i2u(i%)))) then ? "error at ";i%
next
-32768から32767の範囲で等号が成立します。
相互変換可能な範囲がずれただけで、その個数は相変わらず2^16個です。
> &B10000とかが二進法で、16とかが10進法。ただしCPUは0001などbitを扱っているだけで、&B10000が16と解釈しているのは人間側。
合ってますが、一点だけ、3DS の CPU は ARM という種類なのですが、この CPU は bit 列を「符号なし整数」「符号付き整数」として解釈する機能を持っているんです。そのため、ARM の場合は「10000 というbit列を 16 と解釈している」と言えるでしょう。
CPUにとって必須ではありませんが、整数の加算減算ができるととても便利。てなわけで、実は全ての実用的な CPU は ARM 同様 bit 列を符号無し/符号付整数として扱うことができますし、その加減算もできます。
ARM は整数の加減算にくわえ、乗算もできます。除算はできません。だから割り算をするにはプログラムを書いてやる必要があります。