演算記号について
&について
一般的な使い方ではif命令で「〜と〜の両方が正しい」というように使います。
if a&b
よく使うのはこんな感じでしょう
if (a=b)&(c=d)
これでa=bとc=dの両方が成り立っているときの判定が出来ます。
ここまでは絶対に知っておきましょう、よく使うので。
a=b&c
bとcを数値にしてみましょう。
a=100&50
この場合aにはどんな数値が入るのでしょうか。
この計算は2進数化してみるとよくわかります。
100 → 01100100
50 → 00110010
この2つの数値をたてに並べて、2つとも1である部分だけが取り出されます
01100100
00110010
↓
00100000
よって、aの値は32になります。
|について
|は&と同じようにif命令で「〜と〜のどちらかが正しい」という判定が出来ます。
if a|b
こんな感じ
if (a=b)|(c=d)
これでa=bとc=dのどちらかが成り立っているときの判定が出来ます。
a=b|c
a=100|50
aに代入される値は&の時と同じように2進数化してみましょう。
100 → 01100100
50 → 00110010
01100100
00110010
↓
01110110
&の時は両方とも1である部分だけが取り出されましたが、|の場合、どちらかが1であれば1を取り出します。
よって、aの値は118になります。
^について
^は、|の時と同じようなものです。
a=b^c
という風にするとどんな数が返ってくるのでしょうか。
a=100^50
この場合も同じように2進数化します。
そして|と同じようにどちらかが1であったときに1を取り出しますが、
^と|の違う点は、^は両方とも1だったときには0を取り出すということです。
01100100
00110010
↓
01010110
よってaの値は86になります。
これは排他的論理と呼ばれるものです。
普段はあまり使うことはないと思われますが、覚えておいて損はないでしょう。
<< >>について
<< >>はビットシフトといい、ビットをずらします。
ビットとは言い換えれば2進数のことです。
HSPでは通常、数値は32ビットです。つまり、32桁の2進数です。
&や|の時もですが32ビットで説明するのは面倒なので8ビットで説明させていただきます。
a=b>>c
a=100>>2
この記述では、100のビットを右に2つずらします。
100 → 01100100
↓
2ビット右へ
+00 01100100
↓
00011001
となります。よって、aの値は25になります。
逆の場合も考えてみましょう。
a=100<<2
100 → 01100100
↓
2ビット左へ
01100100 +00
↓
10010000
よって、aの値は144となります。
その他について
例えば!は、ifではAとBは等しくないという形で使いますが、
a=b!c
というように使うと、
bとcが等しければaは0、等しくなければaは1という風になります。
他にも、
a=b=c ;bとcが等しければ1、等しくなければ0がなります
a=b<c ;bがcより小さければ1、大きければ0になります
a=b>c ;bがcより大きければ1、小さければ0になります
a=b<=c ;bがc以下ならば1、大きければ0になります
a=b>=c ;bがc以上ならば1、小さければ0になります
という記述も可能です。これらはあまり使い道が無いように思えますが、if判定はこれを仕様としていますし、
この式もうまく使えばif命令を省略する事もできるかもしれません。
if a :〜
という感じの書式は、
if a!=0 :〜
と置きかえることが出来ます。
プログラミング言語のほとんどが、TRUEorFALSEという形での条件判定を使っています。
TRUEは1、FALSEは0というようになるので、if判定でも、その式がTRUE、つまり1以上を返した場合に実行されるのです。
はっきり言ってこれまでの計算について私はあまり自信がありません。
もしかしたら間違っている部分があるかもしれません。