Home -> HSP講座 -> 演算子(前編)

演算せよ(前編)

演算子というものを聞いたことがある人はいますか?
これは「演算」をするためのものです。

演算というのは、1つか2つ、あるいは多数の値を処理して、1つの値を返却する操作のことです。計算、と似たような意味合いだと思って問題ないと思います。

ここでは、HSPで使用できる演算子を紹介していきます。


算術演算子

さて、演算子シリーズ第一弾の「算術演算子」ですが、ラッキーなことにこれは非常に簡単です。
なぜなら、「算数」ですでに習ったからのですから。

	mes "7 + 2 = "+ ( 7 + 2 )	// 加法 (足し算)
	mes "7 - 2 = "+ ( 7 - 2 )	// 減法 (引き算)
	mes "7 * 2 = "+ ( 7 * 2 )	// 乗法 (かけ算)
	mes "7 / 2 = "+ ( 7 / 2 )	// 除法 (割り算)
	mes "7 \\ 2 = "+( 7 \ 2 )	// 剰余演算 (割り算のあまり)
	stop

おぉ!?
やったー簡単だーと思っていたら、なにやら変なのが紛れておりますぞ?
「ああ、剰余演算か。」
誰だよっ!!!

剰余演算[じょうよえんざん]」と呼び名はいかめしいですが、「割り算の余り」(剰余)のことです。
記号 \ を使います。

あと、"7 \\ 2 = " と、\ を2つ重ねたのには理由がありますが、後で説明します。
また、かけ算・割り算の記号が算数・数学のとは違いますが、これは、パソコンで使える記号の数が少なかったせいです。似たような記号で代用していたんですね。


相等演算子

同値かどうかを判断する演算です。
== (もしくは、単に = ) で、等しいかどうか、
!= (もしくは、単に ! ) で、等しくないかどうか
という意味になります。

ところで、演算は値を返すと言いましたが、それでは「等しくない」を表す値とは一体なんでしょうか?
これは、「等しくない」ことを「偽」、「等しい」ことを「真」という特殊な値で表現します。そして、HSPに存在する次の約束事を利用します:
0 は偽、0 以外は真 つまり、 == や != の演算をすると、整数値(int)が返ってくるのです! (不思議ですね) 「等しくない」ときは 0 、「等しい」ときは 0 以外の数値になります。


関係演算子

関係演算子というのは、その名の通り2つの値の関係を表すものです。比較演算子といったりもします。
大きい(>)、小さい(<)、以上(>=)、以下(<=) の4パターンがあります。
不等号と同じなので、さほど難しくはありません。
= 付きのタイプは、2つが等しい場合も成立します ( 以上、以下のバージョンですね )。
上と同じように、関係が成り立つときに「真」、成り立たないときに「偽」が返ってきます。

ただし、注意が必要なのは、2つしか比較できないということです。
つまり、数学でありがちな「-2 < x < 3」といったことはできません。
これは、次の「論理演算子」を使って、「-2 < x && x < 3」と、2つに分けてやる必要があります。


論理演算子

この演算子は、英語の授業で習ったはず(?)で、アンド、オアの2つです。
HSPでは記号を使って、&& (または単に & )、||(または単に | ) と表します。
また、andor と書くこともできます。
ご存知の通り、条件式を連結する演算子です。

	int1 = 12
	int2 = 27
	
	if (    5 >  int1 && int1 > 16 ) : mes "5 > int1 > 16"
	if ( int2 ==   18 || int2 < 16 ) : mes "int2 は、18 か 16未満です。"
	stop

意味のあるサンプルではありませんが、こんな具合です。
&& は両方成立する場合のみ成立し、
|| はどっちかが成立すれば成立します。

★でもちょっと違う「or」。
Chiken, or Beaf?
機内で交わされるという質問です(実際は知らないが)。この場合の or は、「少なくとも一方」ではなく「どちらか1つ」を表します。「Both, please.」なんて答える人、いないでしょ? ……たぶん。
このように、自然言語( 人間が普通に使う言語、英語や日本語 )における「or」の接続語は、プログラミングでは「xor」と呼ばれる意味で、or ではありません。この xor ( ^ 演算子) というのは、片方が成立して、もう一方が成立しないときに、成立する論理演算子として使用できます。

ビット演算子

ビット演算のための演算子として、HSPでは &, |, ^, <<, >> をサポートしていますが、これはややこしいので、次回に回します。


代入演算子

その名の通り、代入するための演算子です。以下の13個が当てはまります。

代入演算子(=) と演算子がくっついているものは、複合代入演算子といいます。
※複合代入演算子はどれも、変数の値と計算する式と、代入文をくっつけただけです。

// 次の2つは同じ意味。<op> には演算子が入ります。
	a <op>= b
	a     = a <op> b
代入に使う演算子のリスト
演算子 効果
= 代入します。つまり、左辺の変数の値を右辺の値に置き換えます。
+= 変数の値に加算した値を代入します。
-= 変数の値から減算して、代入ます。
*= 変数の値に乗算して、代入します。
/= 変数の値から除算して、代入ます。
\= 変数の値から除算したあまりを代入します。
++ 変数の値を 1 増やします。インクリメント演算子。
-- 変数の値を 1 減らします。デクリメント演算子。
	a  = 20		// 20 を代入
	a *= 5		// 「a = a * 5」の略
	mes "a = "+ a	// 100
	
	a ++		// 「a = a + 1」の略
	mes "a = "+ a	// 101
	
	a --		// 「a = a - 1」の略
	mes "a = "+ a	// 100
	
	stop

前半は以上で終了です。お疲れ様でした。(+_+;)
最後に、演算子のリストを載っけて終了します。

演算子まとめ
演算子 読み方 分類 効果
+ 足す 算術 加法( 足し算 )をします。
- 引く 算術 減法( 引き算 )をします。
* かける 算術 乗法( かけ算 )をします。
/ わる 算術 除法( 割り算 )をします。
\ mod 算術 剰余演算[じょうよえんざん]をします。
これは、割り算のあまりを求める計算です。
== (=) イコール 関係 等しいかどうかを判断します。
!= (!) は、〜ではない 関係 == の逆です。
< 小なり 関係 左が、右より小さければ成立する条件です。
> 大なり 関係 左が、右より大きければ成立する条件です。
<= 小なりイコール 関係 左が、右以下なら成立します。
>= 大なりイコール 関係 左が、右以上なら成立します。
&& (and) アンド (かつ) 論理 左右の条件が、両方成立するかどうかを判断します。
|| (or) (左) か (右) の少なくとも一方が 論理 左右の条件のうち、少なくとも一方が成立していれば、成立します。
= --- 代入 変数に値を代入します。代入演算子。
+= --- 代入 変数の値に加算した値を代入します。
-= --- 代入 変数の値から減算します。
*= --- 代入 変数の値に乗算します。
/= --- 代入 変数の値から除算します。
\= --- 代入 変数の値と除算したあまりを代入します。
++ --- 代入 変数の値を 1 増やします。
インクリメント演算子。
-- --- 代入 変数の値を 1 減らします。
デクリメント演算子。