Smart -Web Magazine

WEB開発者に嬉しいステキ講座

MENU

演算子を使って計算しよう

2009年8月14日 コメントの追加

演算子

演算子とは、演算内容を指示する記号のことです。SQLの中で使用される式は、『オペランド』と『演算子(オペレータ)』を組み合わせたものです。オペランドとは、演算の対象になる値やフィールド指定などを総称したもので、このオペランドを操作する記号が、演算子です。

次の式では、10と100がオペランド、+ が演算子に当たります。

10 + 100
演算子一覧
種類 演算子
算術演算子 +-*/
比較演算子 =<>!=><<=>=
IS NULL / IS_NOT_NULL
IN / NOT IN
EXISTS / NOT EXISTS
BETWEEN AND
LIKE
論理演算子 AND / &&
OR / ||
NOT / !
日付/時刻演算子 +、-#-
集合演算子 UNION (ALL)
フィールドの値をオペランドにする

SQLでは、文字列や数字といったリテラル値以外に、テーブルのフィールドなどを指定することができます。たとえば、下記のクエリではgoodsというテーブル名の[price]フィールドをオペランドとして指定しています。

SELECT price * 10 FROM goods;

算術演算子

算術演算子の概要

演算子には算術演算子、比較演算子、論理演算子、ビット演算子といった種類がありますが、その中でも算術演算子は一般的にもっともよく使われる演算子です。算術演算子は、加算や減算を行うための演算子です。

SELECT構文で10に100を加算する式は下記のようになります。

SELECT 10 + 100;

-> 110

+ や - などの演算をあらわす記号が演算子、特に上記のような計算に使う演算子を『算術演算子』と呼びます。

+, -, *, / 加減剰余

加減剰余の四則演算には、加算( + )、減算( - )、乗算( * )、除算( / )の演算子があります。

算術演算子の一覧
演算子 説明
+ 足し算
- 引き算
* 掛け算
/ 割り算
% 剰余

算術演算子

+演算子
足し算

+演算子はオペランドを加算します。

SELECT 2 + 10;

-> 12

-演算子
引き算

-演算子はオペランドを減算します。

SELECT 2 - 10;

-> -8

*演算子
掛け算

*演算子はオペランドを乗算します。

SELECT 2 * 10;

-> 20

/演算子
割り算

/演算子はオペランドを除算します。

SELECT 2 / 10;

-> 0.20

0で割ったり、整数で64ビットを超えた場合など、エラーの場合はNULLを返します。

SELECT 2 / 0;

-> NULL

%演算子
剰余

%演算子はオペランドを除算した余りの値を返します。

SELECT 10 / 3;

->1

演算子の優先順位

演算子には優先順位があり、ひとつの式に複数の演算子が含まれる場合、優先順位が高い演算子から演算されます。次の表は、優先順位の高い順に並んでいます。同じ行に並んで記載されている演算子は、優先順位が同じものです。

演算子の優先順位一覧
演算子 解説
! 論理否定
^ 階乗
*、/、% 掛け算、割り算、剰余
-、+ 足し算、引き算
<<、>> 左にビットをシフト、右にビットをシフト
& ビット演算のAND
| ビット演算のOR
=、<=>、>=、>、<=、<、<>、!=、LIKE、REGEXP、IN 等しい、<=>、大きい・もしくは等しい、大きい、小さい・もしくは等しい、小さい、等しくない、等しくない、パターンマッチング、正規表現、複数の条件一致の設定
BETWEEN、CASE 範囲内に収まっているか、値の変換
NOT 論理否定
&&、AND 論理積、論理積
||、OR、XOR 論理和、論理和、排他的論理和

グループ化演算子

演算子には結合性と優先順位があります。優先順位の高い演算子は、低い演算子よりも先に処理されます。たとえば、次のような計算式の場合、+ 演算子よりも * 演算子のほうが優先順位が高いため、「10*5」が先に演算され、次に「10*5」の結果に10を加算します。

SELECT 10 + 10 * 5;

-> 60

優先順位によって演算の順番がわかりにくくなるような際は、グループ化して優先順位を明確にすることができます。式を括弧で囲むと、中の式はグループ化され、優先順位にかかわらず、グループ内の式が先に演算されます。カッコの使い方は代数学の場合と同じです。たとえば、「10 + 5」に2を掛けるには次のように書きます。

SELECT (10 + 5) * 2;

-> 30

計算式が複雑になるときはカッコを使って見やすくしましょう。

式の規則
  • 式の中でカッコ内にある演算子は、最初に計算されます。
  • 演算子の順番では、乗算、除算、剰余演算子の次に加算、減算が計算されます。
  • 同一の優先順位にある演算子が複数並ぶときは、左から順に計算されます。

比較演算子

比較演算子の概要

『比較演算子』は、複数のオペランドを比較し、その結果を 0 か 1 の『論理値(ブール値)』で返す演算子です。論理値は 0 が『偽(FALSE)』 、1 が『真(TRUE)』 を表します。

論理値
論理値はTRUEかFALSEだけを扱います。値が数値の 0 か空の文字列の場合は常にFALSE、それ以外はTRUEです。

次の例では、= 演算子を使って、二つのオペランドの大きさが同じかどうかを比較しています。

# 比較が正しい場合は 1 が返されます
SELECT 50 = 50;

-> 1

# 比較が誤っている場合は 0 が返されます
SELECT 50 = 100;

-> 0

文字列を使った比較も可能です。

SELECT 'AAA' = 'AAA';

-> 1

SELECT 'AAA' = 'BAA';

-> 0

文字列と数値の比較もできます。

SELECT '1' = 1;

-> 1

SELECT '1' = 2;

-> 0

比較の規則
  • 比較対象のオペランドが、どちらか一方でもNULLの場合は、返却値もNULLです。
  • 比較対象のオペランドの両方が文字列の場合、文字列として比較します。
  • 比較対象のオペランドの両方が整数の場合、整数として比較します。
  • [MySQLの場合] 比較対象のオペランドの一方がTIMESTAMPまたはDATETIMEで、他の引数が定数の場合は、定数は比較前にTIMESTAMPに変換されます。他の場合は全て浮動小数として比較されます。
比較演算子の一覧
演算子 説明
= 等しい
!=
<>
等しくない
> 大きい
< 小さい
>= 大きい、もしくは等しい
<= 小さい、もしくは等しい

これらの演算子は数値と文字列の両方で使えます。必要であれば、文字は自動的に数字に変換され、数字は文字に変換されます。 

比較演算子

比較関数は数値と文字列の両方で利用でき、1 (TRUE)、0 (FALSE)、もしくはNULLを返します。

=演算子
等しい

=演算子は左右のオペラントが等しいかどうかを判定します。等しい場合は 1、等しくない場合は 0 を返します。

SELECT 1 = 0;
-> 0

SELECT 0 = 0
;
-> 1

SELECT 'A' = 'A'
;
-> 1

SELECT 'A' = 'B'
;
-> 0

<>演算子 / !=演算子
等しくない

<>演算子は左右のオペラントが等しくないかどうかを判定します。等しくない場合は 1、等しい場合は 0 を返します。

SELECT 1 <> 0;
-> 1

SELECT 0 <> 0
;
-> 0

SELECT 'A' <> 'A'
;
-> 0

SELECT 'A' <> 'B'
;
-> 1

>演算子
大きい

>演算子は左辺のオペランドが右辺のオペランドよりも大きいかどうかを判定します。大きい場合は 1、大きくない場合は 0 を返します。

SELECT 1 > 0;
-> 1

SELECT 0 > 0
;
-> 0

SELECT -1 > 0;
-> 0

SELECT 'Z' > 'A'
;
-> 1

SELECT 'A' > 'B'
;
-> 0

<演算子
小さい

<演算子は左辺のオペランドが右辺のオペランドよりも小さいかどうかを判定します。小さい場合は 1、小さくない場合は 0 を返します。

SELECT 1 < 0;
-> 0

SELECT 0 < 0
;
-> 0

SELECT -1 < 0;
-> 1

SELECT 'Z' < 'A'
;
-> 0

SELECT 'A' < 'B'
;
-> 1

>=演算子
大きい、もしくは等しい

>=演算子は左辺のオペランドが右辺のオペランドよりも大きい、もしくは等しいかどうかを判定します。大きい、もしくは等しい場合は 1、小さい場合は 0 を返します。

SELECT 1 >= 0;
-> 1

SELECT 0 >= 0
;
-> 1

SELECT -1 >= 0;
-> 0

SELECT 'Z' >= 'A'
;
-> 1

SELECT 'A' >= 'B'
;
-> 0

<=演算子
小さい、もしくは等しい

>=演算子は左辺のオペランドが右辺のオペランドよりも小さい、もしくは等しいかどうかを判定します。小さい、もしくは等しい場合は 1、大きい場合は 0 を返します。

SELECT 1 <= 0;
-> 0

SELECT 0 <= 0
;
-> 1

SELECT -1 <= 0;
-> 1

SELECT 'Z' <= 'A'
;
-> 0

SELECT 'A' <= 'B'
;
-> 1

<=>演算子
等しい(NULL安全)

<=>演算子は左右のオペランドが等しいかどうかを判定します。等しい場合は 1、等しくない場合は 0 を返します。

SELECT 1 <=> 1;
-> 1

SELECT NULL <=> NULL;
-> 1

SELECT 1 <=> NULL;
-> 0

IS NULL演算子
IS NOT NULL演算子
NULLの判定

IS NULL演算子は、式がNULLかどうかを判定します。式がNULLであれば 1 を、そうでなければ 0 を返します。

式 IS NULL
式 IS NOT NULL

次の例では、1、0、NULLの値を判定しています。

SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
-> 0 0 1

IS NOT NULL演算子は、IS NULL演算子の反対で、式がNULLであれば 1 を、そうでなければ 0 を返します。

SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
-> 1 1 0

ISNULL演算子
NULLの判定

ISNULL演算子は、式がNULLかどうかを判定します。利用方法以外はIS NULLと同じで、式がNULLなら 1 を、そうでなければ 0 を返します。

ISNULL(式)

ISNULL演算子は引数に式を指定します。

SELECT ISNULL(1+1);
-> 0
SELECT ISNULL(1/0);
-> 1

※NULLの値を = を使用して比較した場合は常に偽(false) となることに注意!

IN演算子
NOT IN演算子
複数の条件一致の設定

IN演算子は、複数の条件一致を設定することができます。

式 IN ( x1, x2, ... )

式の値が、引数x1や引数x2とマッチするかを調べ、マッチした場合は 1 を返し、そうでなければ 0 を返します。

SELECT 2 IN (1, 2, 3, 'abc');
-> 1

SELECT 5 IN (1, 2, 3, 'abc');
-> 0

SELECT 'abc' IN (1, 2, 3, 'abc');
-> 1

IN演算子はWHERE句の可読性を高くすることができます。たとえば、購入履歴から顧客IDが 3 と 2 にあたるレコードを参照するとき、比較演算子のORを使うと下記のようになります。

SELECT * FROM 購入履歴
WHERE 顧客ID = 1 OR 顧客ID = 2;

これと同じ事が IN 演算子を利用すると、より簡単な文で書くことができます。

SELECT * FROM 購入履歴
WHERE 顧客ID IN ( 1, 2 ) ;

NOT IN演算子はINの逆で、引数のリストにある値とマッチするかを調べ、マッチした場合は 0、そうでなければ 1 を返します。

SELECT 2 NOT IN (1, 2, 3, 'abc');
-> 0

EXISTS演算子
存在するか判定

EXISTS、ANY、ALL演算子は、メインクエリのWHERE句で使用され、サブクエリが返す値を論理値として評価します。EXISTS演算子はサブクエリが返す結果セットの有無を評価し、ANY演算子は結果セットのいずれかの値を評価対象とします。ALL演算子は結果セットの全ての値を評価対象とします。

EXISTS演算子は、サブクエリが返す値がある場合は 1、返す値がない場合は 0 を返します。サブクエリの返す値は複数のレコードでも、複数の列でも問題ありません。

EXISTS (サブクエリ)

次の例では、商品(goods)テーブルから商品IDが"1"のレコードをサブクエリで選択しています。商品IDが"1"のレコードが存在した場合、メインのSELECTで選択した内容が出力されます。

SELECT id_g FROM goods
WHERE EXISTS
(SELECT * FROM goods WHERE id_g = 1);
-> +------+
-> | id_g |
-> +------+
-> | 1 |
-> | 2 |
-> | 3 |
-> | 4 |
-> | 5 |
-> | 6 |
-> +------+

サブクエリの条件にあったレコードがなかった場合は、EXISTSは 0 を返します。WHERE句の条件が偽となったため、メインのSELECTが選択するレコードはありません。

SELECT id_g FROM goods
WHERE EXISTS
(SELECT * FROM goods WHERE id_g = 10);

BETWEEN演算子
範囲内に収まっているか

BETWEEN演算子は、値の範囲を調べます。

式 BETWEEN 最大値 AND 最小値

式の値が"最大値"以下で、"最小値"以上であれば 1 を返し、そうでなければ 0 を返します。

SELECT 5 BETWEEN 5 AND 10 ;
-> 1

SELECT 11 BETWEEN 5 AND 10;
-> 0

SELECT 'b' BETWEEN 'a' AND 'c';
-> 1

論理演算子

『論理演算子』とは、オペランドを論理値として評価し、複数のオペランドの結果を論理値で返したり、論理値を反転したりします。

算術演算子同様に、よく利用される演算子の1つで、その種類には「AとBがTRUEならば・・・」のAND ( && )演算子、「A、もしくはBのどちらかがTRUEならば・・・」のOR ( || )演算子、否定のNOT ( ! )があります。

SELECT 1 AND 1;
-> 1

SELECT 1 AND 0;
-> 0

SELECT 1 OR 1;
-> 1

SELECT 1 OR 0;
-> 1

SELECT 0 OR 0;
-> 0

SELECT NOT 1;
-> 0

論理演算子の一覧
演算子 名称 説明
AND / && 論理積 左右の式の両方が真を返すかどうかを判定し、論理値を返します。
全ての条件式が 0 または NULL以外であれば 1 を返します。引数に 0 やNULLといった値がひとつでも含まれる場合は 0 が返されます。
OR / || 論理和 左右の式のどちらか一方が真を返すかどうかを判定し、論理値を返します。
条件式のどれかが 0 または NULL 以外の値であれば 1 を返します。全ての値が 0 かNULLの場合は 0 を返します。
NOT / ! 論理否定 左右の式の両方が偽を返すかどうかを判定し、論理値を返します。
引数が 0 なら 1 を返し、そうでなければ 0 を返します。例外として、 NOT NULL は NULL を返します。
論理積
&& と AND は、左側の演算子が真であれば、右側の演算子も評価します。左側の演算子が偽であれば、右側の演算子を評価せずに結果を返します。
論理和
|| と OR は、左側の演算子が真であれば、右側の演算子を評価せずに結果を返します。左側の演算子が偽りであれば、右側の演算子も評価します。

AND演算子 / &&演算子
論理積

左右の式の両方が真を返すかどうかを判定し、論理値を返します。
全ての条件式が 0 または NULL以外であれば 1 を返します。条件式に 0 やNULLといった値がひとつでも含まれる場合は 0 が返されます。

SELECT 1 AND 1;
-> 1

SELECT 0 AND 1;
-> 0

SELECT 0 AND 0;
-> 0

SELECT 1 AND NULL;
-> 0

OR演算子 / ||演算子
論理和

左右の式のどちらか一方が真を返すかどうかを判定し、論理値を返します。
条件式のどれかが 0 または NULL 以外の値であれば 1 を返します。全ての値が 0 かNULLの場合は 0 を返します。

SELECT 1 OR 1;
-> 1

SELECT 0 OR 1;
-> 1

SELECT 0 OR 0;
-> 0

SELECT 1 OR NULL;
-> 1

NOT演算子 / !演算子 
論理否定

左右の式の両方が偽を返すかどうかを判定し、論理値を返します。
論理否定のNOTは対象の値を反転します。引数が 0 なら 1 を返し、そうでなければ 0 を返します。例外として、 NOT NULLはNULLを返します。

SELECT NOT 1;
-> 0

SELECT NOT 0;
-> 1

SELECT NOT NULL;
-> NULL

計算の結果を論理否定する場合は、カッコでグループ化しましょう。グループ化を忘れると、最初の数値だけが論理否定の対象になります。

論理否定のためのグループ化
SELECT ! (0+1);
-> 0

最初の数値 0 だけが論理否定され、1 + 1 という計算式になります
SELECT ! 0 + 1;
-> 2

COALESCE

COALESCEは、リストで指定した値の中にあるNULL以外の要素を返します。

SELECT COALESCE(NULL, 5);
-> 5

SELECT COALESCE(NULL, NULL);
-> NULL

INTERVAL(N,N1,N2,N3,...)

N < N1 なら 0 を返し、N < N2 なら1を返します。INTERVALは、左から順番に、Nより大きい数値が最初に現れる位置情報を返す関数です。位置情報はNからみて、Nの右隣が0、その次が1です。全ての引数は数値として扱われます。

SELECT INTERVAL(10, 1, 10, 100, 1000);
-> 2

SELECT INTERVAL(1, 10, 100, 1000);
-> 0

フロー制御関数

IFNULL(expr1,expr2)

expr1がNULLではなければexpr1を、NULLであればexpr2を返します。 IFNULL() はどの文脈で使用されたかにより数値か文字を返します。

SELECT IFNULL(1,0);
-> 1

SELECT IFNULL(0,10);
-> 0

SELECT IFNULL(1/0,10);
-> 10

SELECT IFNULL(1/0,'yes');
-> 'yes'

IF(expr1,expr2,expr3)

expr1 が真 の場合 expr2 を返し、そうでなければ expr3 を返します。
 IFNULL() はどの文脈で使用されたかにより数値か文字を返します。

SELECT IF(1>2,2,3);
-> 3

SELECT IF(1<2,'yes','no');

-> 'yes'

SELECT IF(strcmp('test','test1'),'yes','no');

-> 'no'

expr1 は INTEGER として評価します。これは浮動小数点を使用する場合、比較演算も使用すべきであることを意味します。

SELECT IF(0.1,1,0);
-> 0

SELECT IF(0.1<>0,1,0);
-> 1

上の最初の例では、 IF(0.1) は 0 を返します。なぜなら 0.1 は整数値として変換され IF(0) になり、それをもとにしたテスト結果が返るからです。二番目の場合、比較は、元の浮動小数点値が非ゼロかどうかテストします。比較結果は整数として使用されます。

CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

最初の式は value=compare-value ならばresultを返します。二つ目の式では、最初の条件[condition]が真ならば、resultを返します。もしマッチするresultの値がなければ、ELSE以下のresultが返ります。もしELSE部分がなければ、 NULLが返ります:

SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "more" END;
-> "one"

SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END;
-> "true"

SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END;
-> NULL

戻り値の型(INTEGER, DOUBLE, STRING)は最初に返される値 (最初の THEN の後の式)の型と同じです。


ビット演算子

ビット演算子は、フィールドの値や、指定した値などからビット演算を行います。

|演算子
ビット単位のOR

|演算子はビット単位のORです。いずれかのビットが 1 であれば 1 を返すビット演算です。

SELECT 1 | 1;
-> 1

SELECT 1 | 0;
-> 1

SELECT 0 | 0;
-> 0

&演算子
ビット単位のAND

&演算子はビット単位のANDです。両方のビットが 1 のとき 1 を返すビット演算です。

SELECT 1 & 1;
-> 1

SELECT 1 & 0;
-> 0

SELECT 0 & 0;
-> 0

<<演算子
左シフト

左にビットをシフトします。

SELECT 2 << 1;
-> 4

>>演算子
右シフト

右にビットをシフトします。

SELECT 2 >> 1;
-> 1

^演算子
ビットのXOR

~演算子は、両方のビットが異なるときに 1 を返すビット演算です。

SELECT 1 ^ 1;
-> 0

SELECT 1 ^ 0;
-> 1

SELECT 0 ^ 0;
-> 0

~演算子
ビットの反転

~演算子は、ビットを反転します。

SELECT ~ 0 ;
-> 1

SELECT ~ 1 ;
-> 0

BIT_COUNT演算子

引数Nを2進数表記したときの1の数になっている回数を数えます。

SELECT BIT_COUNT(29);
-> 4

このエントリーをはてなブックマークに追加

演算子

2009年8月4日 コメントの追加

1.演算子の概要

演算子は、算術演算子に代表されるように、変数やリテラルなどの値に対して演算を行うための記号です。 演算子の中でも有名なのが、加算演算子や減算演算子などの算術演算子です。

JavaScriptの組み込み演算子は、『オペランド』の個数によって単数演算子、二項演算子、三項演算子に分類することができます。また、間値演算子か前置演算子か、数値、文字列、ファイルなど捜査対象によっても分類できます。ただし、これらの分類はプログラミングする上であまり重要ではなく、一つ一つの演算子を理解することが必要となります。

用語
オペランド
演算の対象となる値。演算内容をあらわす記号は演算子と呼びます。例えば 10+X という式では、10 と X がオペランドで、+ がオペレータです。

演算子の優先順位

演算子には結合性と優先順位があります。次の表は優先順位が高い順になっています。

演算子の一覧
演算子 結合性
配列 括弧
インクリメント(++)
 デクリメント( -- )
反転( ~ )
NOT( ! )
しない
乗算( * )
除算( / )
剰余( % )
加算( + )
減算( - )
文字列結合( + )
左ビットシフト( << )
右ビットシフト( >> )
符号なし右ビットシフト( >>> )
小さい( < )
大きい( > )
小さいか等しい( <= )
大きいか等しい。( >= )
しない
等しい( == )
等しくない( != )
等しい( === )
等しくない( !== )
しない
ビットごとのAND( & )
ビットごとのXOR( ^ )
ビットごとのOR( | )
論理AND( && )
論理OR( || )
3項の条件演算子( ?: )
代入演算子( = += -= *= など )
カンマ( , )

結合性

 結合性とは、左右どちらかに配置された変数や定数を演算の対象にするかということです。たとえば、&& や || などの論理演算子は左側にある値を対象とします。代入演算子などは右側にある値を対象とします。たとえば、次の式は、加算演算子が左側にある値に対して、右側の値を加算し、代入演算子が右側にある値を左側にある変数に代入しています。

# 10 に x を加算する
val = 10 + x;

演算子と優先順位

優先順位は利便性を考慮して付けられているので、あまり気にしなくても正常に扱えます。もし不安な時は、カッコをつかって順番をはっきりさせましょう。

x = (10 + 10) * 2;

演算子の中で、項が最も高い優先順位を持っています。項には、変数、クォート、クォート風の演算子、カッコで囲んだ式、引数をカッコで囲んだ関数が含まれます。

単項演算子は、引数として1個の値を受け取るものです。演算子を挟んで右と左に値が必要な二項演算子、右側、もしくは左側だけが必要な単項演算子です。

PAGE TOP

2.算術演算子

算術演算子は、数値に対して数学関数を実行します。

算術演算子の使用方法

算術演算子の一覧
演算子 説明 例題
+ 加算 $x = 10+2  # $x の値は 12
- 減算 $x = 10-2  # $x の値は 8
* 乗算(×) $x = 10*2  # $x の値は 20
/ 除算(÷) $x = 10/2  # $x の値は 5
% 剰余 $x = 10%2  # $x の値は 0
** 累乗 $x = 10**  # $x の値は 100
++ インクリメント $x = 10++  # $x の値は 11
-- デクリメント $x = 10--  # $x の値は 9

プログラム言語のほとんどは、算術式を左から順に記述します。2分の1 という式をプログラミング言語のルールに従うと、1/2 となります。

カッコの使い方は代数学の場合と同じです。たとえば、 b+c に a を掛けるには次のようにします。

(b + c) * a

演算子の順番では、乗算、除算、剰余演算子の次に加算、減算が計算されます。同一の優先順位にある演算子が複数並ぶときは、左から順に計算されます。ただし、カッコ内にある演算子は、最初に計算されます。計算式が複雑になるときはカッコを使って見やすくしましょう。

単項のマイナス( - )

単項演算子のマイナス( - )は対象の値が数値であれば、算術否定を行ないます。

x = -10;
val = -x;    // xの値が数値なので、算術否定が行われ、valの値は 10

足し算/引き算/掛け算/割り算

足し算、引き算、掛け算、割り算は違和感なく使うことができると思います。

x = 10 + 2;  # x の値は 12x = 10 - 2;  # x の値は 8
x = 10 * 2;  # x の値は 20
x = 10 / 2;  # x の値は 5

※ 割る数が 0 だとオーバーフローが発生します。割る数が変数ならチェックしてから割り算を実行してください。

剰余

剰余は割ったあまりを返します。

x = 10 % 4;  // 割り切れなかった2が返され、x の値は
2
x = 10 % 2;  // 2 * 5で割り切れるから x の値は 00

インクリメント/デクリメント

++ 演算子と -- 演算子は、引数に1を加える、もしくは1を引きます。

x = 5; y = 5;
x++;       // x は加算されて6
y--;       // y は減算されて4

これらの演算子は、引数の前にある場合は値を返す前に値を増減し、引数の後ろにある場合は値を返してから増減します。引数の前に置く場合はプリインクリメント/プリデクリメント、引数の後に置く場合はポストインクリメント/ポストデクリメントといいます。

x = 5; y = 5
z = x++;       // z に x の値を代入してから、x の値を増加(z の値は 5))
z = ++y;       // yを増加させてからその値を代入(z の値は 6))
PAGE TOP

3.比較演算子

予測できない複数の値を比較したいときは、『比較演算子』を使います。比較演算子は数値用と文字列用の2種類が用意されています。

比較演算子の使用方法

比較演算子は左引数と右引数を比較し、その結果を論理値で返します。

数値比較演算子と文字列比較演算子の早見表
比較 数値 戻り値
等しい == 左引数と右引数が等しければ真を返す。
等しくない != 左引数と右引数が等しくなければ真を返す。
等しい === == 演算子と同様に比較を行いますが、比較対象が同じデータ型でないと評価しません。
等しくない !== != 演算子と同様に比較を行いますが、比較対象が同じデータ型でないと評価しません。
小さい < 左引数が右引数より小さければ真を返す。
大きい > 左引数が右引数より大きければ真を返す。
以下 <= 左引数が右引数と同じか小さければ真を返す。
以上 >= 左引数が右引数と同じか大きければ真を返す。
比較 <=> 等しければ0、大きければ1、右引数が大きければ-1を返す。

数値用の演算子でも、文字列を比較することができます。

1 == '1';  # 等しい
'alpha' == 'beta'  # 等しくない

数値や文字も真偽値が必要なところでは真偽を解釈されます。

# 0 は偽りなのでブロックを実行しない
if (0) { ... }
# 1 は真なのでブロックを実行
if (1) { ... }
# 空の文字列は偽なのでブロックを実行しない
if ("") { ... }
# 通常の文字列なら真なのでブロックを実行する
if ("a") { ... }
PAGE TOP

4.論理演算子

&& や || は『論理演算子』と呼ばれています。「AとBがTRUEならば・・・」、「A、もしくはBのどちらかがTRUEならば・・・」など、式の真偽値を左から順に解釈していきます。

論理演算子の使用方法

論理演算子の一覧1
名前 結果
論理積 a && b $a と $b が真ならTRUEを返す
論理和 a || b $a もしくは $b が真ならTRUEを返す
否定 ! a $aが真でなければTRUEを返す
用語
論理積
&& は、左側の演算子が真であれば、右側の演算子も評価します。左側の演算子が偽であれば、右側の演算子を評価せずに結果を返します。
論理和
 || は、左側の演算子が真であれば、右側の演算子を評価せずに結果を返します。左側の演算子が偽りであれば、右側の演算子も評価します。

条件演算子

?: は、『条件演算子』です。? の前の引数が TRUE であれば、: の前の引数が返されますが、FALSE であれば、: の後の引数が返されます。

x = a > b ? a : 0;

上記の例は、a が b より大きい値であれば a の値を返し、それ以外は 0 を返します。

PAGE TOP

5.文字列演算子

文字列演算子は、値を文字列リテラルと解釈して演算処理を行います。

文字列を連結する演算子

+ 演算子は文字列の連結を行います。

x = "filename";
x = x + ".txt";    // x の値は "filename.txt"
PAGE TOP

6.ビット演算子

ビット演算子は、ビットを対象として処理する演算子です。

論理積

& は、両被演算子のビットごとに論理積をとって、その結果を返します。

X = x1 & x2;

論理和

| は、両被演算子のビットごとに論理和をとって、その結果を返します。

X = x1 | x2;

排他的論理和

^ は、両被演算子のビットごとに排他論理和をとって、その結果を返します。

X = x1 ^ x2;

~ 演算子

式で指定された値の各ビットを反転させます。元の式でビットが 1 の場合、必ず 0 になります。元の式でビットが 0 の場合、必ず 1 になります。

X = ~ x1

~ 演算子は、式の値を 2 進数形式で取り込み、その各ビットを反転させます。例えば変数x1の値が0101であれば、変数Xは1010になります。
 

シフト演算子

<< 演算子は、左引数の値を右引数で示すビット数だけ、左にシフトした値を返します。引数は整数でなければなりません。

 >> 演算子は、左引数の値を右引数で示すビット数だけ、右にシフトした値を返します。引数は整数でなければなりません。

X = x1 >> x2;
X = x1 << x2;

>>>演算子

値の各ビットを指定されたビット数分だけ右へシフトします。ただし、符号は保持されません。

X = x1 >>> x2

>>> 演算子は、x1 の各ビットを x2 で指定されたビット数分だけ右へシフトします。上位ビットは、0 で埋められます。シフトされて最下位ビットより右へ移動した桁は破棄されます。

X = -14 >>> 2

変数 X の値は、-14 (2 進数で 11111111 11111111 11111111 11110010) から 2 ビット分だけ右シフトされて 1073741820 (2 進数で 00111111 11111111 11111111 11111100) になります。
 

PAGE TOP

7.代入演算子

= は代入演算子で、算術演算子、論理演算子、文字列演算子、繰り返し演算子、ビット演算子などと組み合わせて使うことができます。

代入演算子の使用方法

最もよく使われる代入演算子は、次のような単純代入です。

// x に 10 を代入
x = 10;
// x に x の値掛ける2の値を代入
x = x * 2;

上記の最後の行のように、左辺値の値を元にした計算は1つの行で済ませることができます。たとえば、以下の2つの式は同じ意味になります。

// x に 2 を加算
x = x + 2;
// 上記の式と同様に、x に 2 を加算
x += 2;
代入演算子の一覧
演算子 説明
+= 加算して代入
x = 10;    
x += 2;    // x の値は 12
*= 乗算して代入
x = 10;
x *= 2;   // x の値は 20
-= 減算して代入
x = 10;
x -= 2;   // x の値は 8
/= 除算して代入
x = 10;
x /= 2;   // x の値は 5
%= 剰余して代入
x = 10;
x %= 3;   // x の値は 1
このエントリーをはてなブックマークに追加

Jump to the top