HSPが対応する演算子(計算記号)

フリーウェアなWindowsプログラミングツール「HSP」(Hot Soup Processor)がサポートする「演算子」(えんざんし)を ピックアップ。英語だと「Operator」(オペレータ)。分かりやすく言うと、「計算記号」のことですな。

算術演算子 (加算、減算、乗算、除算、剰余算)

トピックス名は何とも難しい表現ですが、要は算数の足し算、引き算、掛け算、割り算、割り算の余り(あまり)です。

加算(かさん)、足し算
減算(げんざん)、引き算
乗算(じょうざん)、掛け算、「×」
除算(じょざん)、割り算、「÷」
剰余算(じょうよざん)、割り算の余り

算数の世界と違って、乗算と除算は「*」(アスタリスク)、「/」(スラッシュ)の表現します。最後は 割り算の余りで、「¥」(円記号、バックスラッシュ)を利用します。ちなみに、C言語では余りは「%」(パーセント)を使います。

//	割り算と余り

;	10割る3の答え
	value = 10 / 3
	mes value

;	10割る3の余り
	value = 10 \ 3
	mes value

ちなみに、こういう書き方(算数・数学の計算式)はできないので注意。

;	×ダメダメ
	10 + 3 = value
	mes value

円記号が剰余算の記号として使われる関係上、文字として円記号を表現したい場合は2回繰り返さないとダメです。 これはパラメータにファイルパス(パスの区切り)なんかを指定する必要がある命令(bload命令、noteload命令、chdir命令、dirlist命令など)でも注意が必要です。

//	円記号を文字表現

	mes "[\]"	; ×
	mes "[\\]"	; ○

	mes "C:\Program Files\hsp31"	; ×
	mes "C:\\Program Files\\hsp31"	; ○

//	ファイルパス
	notesel buf
;	noteload "C:\Program Files\hsp31\readme.txt"	; エラー
	noteload "C:\\Program Files\\hsp31\\readme.txt"	; ○

割り算の余りはif命令と組み合わせると下のような処理で使えます。

//	2で割り切れるかチェック

	data = "あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ"

;	2で割り切れず余りが出る → 奇数
	foreach data
		if cnt \ 2 {
			mes data.cnt
		}
	loop

	mes ""

;	2で割り切れる → 偶数
	foreach data
		if cnt \ 2 = 0 {
			mes data.cnt
		}
	loop

算術演算子 (ビット演算)

ビット単位の演算です。「0」と「1」の2進数レベルで演算します。

論理積、マクロ定義で「and」
論理和、マクロ定義で「or」
排他的論理和、マクロ定義で「xor」
<< 左ビットシフト
>> 右ビットシフト
& 演算
左側 右側 結果

記号は「アンパサンド」(Wikiepdia)。

;	答えは%0000 (0)
	mes %1000 & %0101

;	答えは%1000 (8)
	mes %1100 & %1010
| 演算
左側 右側 結果

記号は「縦線」「パーティカルバー」(Wikiepdia)。キーボードでは「円記号¥」の入力と同じ。

;	答えは%1101 (13)
	mes %1000 | %0101

;	答えは%1110 (14)
	mes %1100 | %1010
^ 演算
左側 右側 結果

記号は「ハット記号」「サーカムフレックス」(Wikipeida)。キーボードでは「〜」の入力と同じ。

;	答えは%1101 (13)
	mes %1000 ^ %0101

;	答えは%0110 (6)
	mes %1100 ^ %1010

左・右にビットをずらします。

;	1ビットずらしは2倍
	mes %1011
	mes %1011 << 1

;	答えは%1110000 (112)
	mes %111 << 4
;	1ビットずらしは1/2倍
	mes %1000
	mes %1000 >> 1

;	答えは%10 (12)
	mes %100011 >> 4

条件演算子


==
等号
!=
不等号
かつ
または
左辺が大きい
左辺が小さい
>= 左辺が大きいか等しい
<= 左辺が小さいか等しい

代入演算子

変数に代入します。


==
『a = b』は「aにbを代入」
+= 『a += b』は「aにbを足して、aに代入」
『a = a + b』に相当
−= 『a -= b』は「aからbを引いて、aに代入」
『a = a - b』に相当
*= 『a *= b』は「aにbを掛けて、aに代入」
『a = a * b』に相当
/= 『a /= b』は「aをbで割って、aに代入」
『a = a / b』に相当
¥=
|=
&=
^=
<<=
>>=

たとえば。

//	整数値の桁数を取得

	value = 1234567

	repeat
		if value = 0 : keta = cnt : break

		value /= 10
	loop

	mes keta
//	整数値を逆から表示

	value = 3141592

	repeat
		if value = 0 : break

		mes value \ 10
		value /= 10
	loop

代入演算子 (インクリメント、デクリメント)

次は特殊な演算子。プラス2つ、マイナス2つで、1の増減が可能です。C言語の用語だと後置インクリメント(デクリメント)といいますが、前置インクリメント(デクリメント)には対応してません。

++ インクリメント、1の加算 『a++』は「aに1を足して、aに代入」
『a = a + 1』に相当
−− デクリメント、1の減算 『a--』は「aから1を引いて、aに代入」
『a = a - 1』に相当

普通の代入処理よりコード量が少ないためスピードは上です(あくまで代入との比較で)。 ちなみに、プラス1つ、マイナス1つでも機能しますが、スピードなどにいっさい違いはありません。

	value = 0

	repeat 5
;		「value = value + 1」に等しい
		value++

		mes value
	loop

	repeat 5
;		「value = value - 1」に等しい
		value--

		mes value
	loop

代入演算子 (符号の反転)

元の数値がマイナスの場合はプラスに、プラスの場合はマイナスに符号が反転します。

	value = -10
	mes -value

	value = 10
	value2 = -value
	mes value2

左辺ベースの型変換

HSP特有の処理として、演算する左辺の型(整数値・文字列・実数値)をベースに右辺の型変換が行われます。

整数値 + "文字列"
整数値 − "文字列"
整数値 * "文字列"
整数値 / "文字列"
文字列が中身0の整数値が代入された変数と判断
(除算は不可能なので必ずHSPエラー19
整数値 + "数値文字列"
整数値 − "数値文字列"
整数値 * "数値文字列"
整数値 / "数値文字列"
整数値同士のの加算・減算・乗算・除算
"文字列" + 整数値
"文字列" − 整数値
"文字列" * 整数値
"文字列" / 整数値
加算が文字列同士の結合
(それ以外は不可能なので必ずHSPエラー21
整数値 + 実数値
整数値 − 実数値
整数値 * 実数値
整数値 / 実数値
整数値同士の加算・減算・乗算・除算
<C言語とは異なる>
実数値 + 整数値
実数値 − 実数値
実数値 * 実数値
実数値 / 実数値
実数値同士の加算・減算・乗算・除算

文字列が数字の場合は、HSPエラーが表示される定番どころ。左辺でint関数する、あるいは左辺で 加算(0)か乗算(1)の処理を付け加えます。また、実数値(小数点)の場合は、C言語で言う左辺の 「格上げ」が行われないので注意。double関数で変換する、あるいは左辺で加算(0.0)か乗算(1.0) の処理を付け加えます。

キーワード de HSP

HSPミニ講座

★ Yahoo!経由用ページ : ファイル | フォルダ | メニュー | マウス | ウィンドウ | オブジェクト | 文字列 | システム | 関数 | sendmsg命令 | その他 | サイトマップ | リンク