# オペレーター（演算子）

マニュアル > 画面作成ガイド > スクリプト > スクリプトの構文 > # オペレーター（演算子） |

オペレーター(演算子)

スクリプトで使用できるオペレータは以下のとおりです。

オペレーター
算術演算子 |
マイナス符号 | - | 式の符号を反転した値を指定するために使用されます。
乗算 | * | 2つの数値の積を計算します。
除算 | / | 2つの数値の商を計算します。
加算 | + | 2つの数値の和を求めます。
減算 | - | 2つの数値の差を求めます。
比較演算子 |
等しい | = | 2つの数値の比較し、等しければTRUEを返します。
等しくない | != | 2つの数値の比較し、等しくなければTRUEを返します。
より小さい | < | 2つの数値の比較し、左値が右値より小さければTRUEを返します。
より大きい | > | 2つの数値の比較し、左値が右値より大きければTRUEを返します。
以下 | <= | 2つの数値の比較し、左値が右値以下であればTRUEを返します。
以上 | >= | 2つの数値の比較し、左値が右値以上であればTRUEを返します。
論理演算子 |
論理否定 | ! | 式の論理否定を求めます。
論理積 | && | 2つの式の論理積を求めます。
論理和 | || | 2つの式の論理和を求めます。
ビット演算子 |
And演算子 | & | ビット毎のAnd演算子（整数としてビット単位の比較をします）。尚、左式が文字列の場合、文字列として結合させます。
Or演算子 | | | ビット毎のOr演算子（整数としてビット単位の比較をします）。

オペレーターの特長と使用例

暗黙の文字列合成と数値演算

オペランドの内容がいずれも文字列の場合、加算は文字列の合成として処理されます。ただし、片方のオペランドが数値でもう片方のオペランドが文字列の場合には、文字列の内容が数字の場合は数値同士の演算として加算が行われます。

    var a = "Hello" + " " + "World";//変数aには文字列"Hello World"が代入される
    var b = "1" + 2;		//変数bには数値3が代入される
    var d = 1 + "2";		//同様に数値3になる

四則演算におけるブール値の解釈

ブール値を四則演算しようとすると、Tは1、Fは0に変換されます。

    var a = T + T + T + F + T;	//数値4になる（1+1+1+0+1）
    var b = T * 123 + F * 456;	//数値123になる（1*123 + 0*456）

時刻の加算と減算

時刻の場合、下記の値の組み合わせで加算、減算が行えます。

1)[時刻] + [数値]　または　[時刻] - [数値]の場合
数値は秒として解釈され、秒単位で時刻の値を進めたり戻したりできます。

    var a = #2004/1/1 0:0:0#;
    var b = a + 10;  	// bはaに10秒加算されて#2004/1/1 0:0:10#になる
    var d = a + 10.123; 	// bはaに10秒123ms加算されて#2004/1/1 0:0:10.123#になる

2)[時刻] - [時刻] の場合
時刻の差を秒として数値で返します。

    var a = #2004/1/1 0:0:0#;
    var b = #2004/1/1 0:1:0#;
    var d = b - a;   		 // dは60になる（1分の差＝60秒）

配列に対する演算

■四則演算（ +, -, *, / ）オペレータ

    a = c(1,2,3);
    b = a + 1;		// bはc(2, 3, 4)になる
    d = a - 1;		// dはc(0, 1, 2)になる
    e = a * 2;		// eはc(2, 4, 6)になる
    f = a / 2;		// fはc(0.5, 1, 1.5)になる
    g = a + c(2, 3, 4);	// gはc(3, 5, 7)になる

■比較演算（ <, <=, >, >=, == ）オペレータ

    a = c(1,2,3);
    b = a < 2;		// b はc(T, F, F)になる
    d = a <= 2;		// d はc(T, T, F)になる
    e = a > 2;		// e はc(F, F, T)になる
    f = a >= 2;		// f はc(F, T, T)になる
    g = a == 2;		// f はc(F, T, F)になる
    h = a > c(3, 2, 1);	// gはc(F, F, T)になる

時刻の加算と減算

多次元配列の場合も、要素すべてに一括で演算が行われます。

    a = c(c(1,2,3), c(4,5,6));
    b = a + 2;			// b はc(c(3,4,5), c(6,7,8))になる

| 「c(1,2,3,4,5,6,7,8) + c(1,2,3)」のように異なる要素数の配列の演算をした場合は、右側c(1,2,3)が繰り返し演算に使用されます。つまり「c(1,2,3,4,5,6,7,8) + c(1,2,3)」は「c(1,2,3,4,5,6,7,8) + c(1,2,3,1,2,3,1,2)」 と同じ結果、つまりc(2,4,6,5,7,9,8,10)となります。

数値のビット演算

2進数でi番目のビットを取得したり、i番目のビットだけをON/OFFしたりする場合には、ビット演算子（「&」及び「|」）を使用します。

例）

    var b = (a & 0x1) > 0;	// aの数値の1ビット目が1であればbはTになります。
    var b = (a & 0x2) > 0;	// aの数値の2ビット目が1であればbはTになります。
    var b = (a & 0x4) > 0;	// aの数値の3ビット目が1であればbはTになります。
    var b = (a & 0x8) > 0;	// aの数値の4ビット目が1であればbはTになります。

    var a = a | 0x1;	// aの数値の1ビット目を1にします。
    var a = a | 0x2;	// aの数値の2ビット目を1にします。
    var a = a | 0x4;	// aの数値の3ビット目を1にします。
    var a = a | 0x8;	// aの数値の4ビット目を1にします。

    var a = a & 0xFFFE;	// aのワード値の1ビット目を0にします。
    var a = a & 0xFFFD;	// aのワード値の2ビット目を0にします。
    var a = a & 0xFFFB;	// aのワード値の3ビット目を0にします。
    var a = a & 0xFFF7;	// aのワード値の4ビット目を0にします。