ここでは、JavaScriptの演算子をまとめています。ご参考になれば幸いです。
プログラミングはいろいろな値(文字列や数値)を足したり引いたり(計算)して処理をします。この式の表現に用いる記号を演算子と言います。
算術をするための演算子です。 | 値 演算子 値; 単項演算 変数 演算子; 演算子 変数; |
||
---|---|---|---|
= | 値を代入します。 | 例 : y = x | |
+ | 加算します。使用例はこちら | 例 : z = x + y | |
- | 減算します。負の値も表します。 | 例 : z = x - y | |
* | 乗算します。 | 例 : z = x * y | |
/ | 除算します。 | 例 : z = x / y | |
% | 余剰。除算の余り(割り切れずに残った部分)。 小数点以下切り捨て。使用例はこちら |
例 : z = x % y | |
++ | 「単項演算」インクリメント(値を1増やします。)使用例はこちら | 例 : y = x++ | 代入後に加算 |
例 : y = ++x | 代入前に加算 | ||
-- | 「単項演算」デクリメント(値から1引きます。) | 例 : y = x-- | 代入後に減算 |
例 : y = --x | 代入前に減算 |
左右の値を比較するための演算子です。 真の時true、偽の時falseを返します。 | 値 演算子 値; | ||
---|---|---|---|
== | 左右の値(式)が等しい。 | 例 : x == y | |
!= | 左右の値(式)が等しくない。 | 例 : x != y | |
< | 右の値(式)が大きい。 | 例 : x < y | |
<= | 右の値(式)が大きいか等しい。 | 例 : x <= y | |
> | 左の値(式)が大きい。使用例はこちら | 例 : x > y | |
>= | 左の値(式)が大きいか等しい。 | 例 : x >= y |
左右の値を論理的に比較するための演算子です。 真の時true、偽の時falseを返します。 | 論理値 演算子
論理値; !の場合は 演算子 論理値; も可 |
|||
---|---|---|---|---|
&& | かつ(AND) | 例 : x && y | xかつy | xy両方真のときtrue、それ以外はfalse |
|| | または(OR) | 例 : x || y | xまたはy | xy両方か、片方が真のときtrue |
! | ではない(NOT) | 例 : x ! y | xはyではない | xy両方偽のときtrue |
代入の仕方を指定するための演算子です。 | 変数 演算子 値; | ||
---|---|---|---|
+= | 左に右の値を加算して左に代入します。 | 例 : x += y (x = x + yと同じ) | |
-= | 左に右の値を減算して左に代入します。 | 例 : x -= y (x = x - yと同じ) | |
*= | 左に右の値を乗算して左に代入します。 | 例 : x *= y (x = x * yと同じ) | |
/= | 左に右の値を除算して左に代入します。 | 例 : x /= y (x = x / yと同じ) | |
%= | 左に右の値で除算した余りを左に代入します。 | 例 : x %= y (x = x % yと同じ) |
文字列同士を連結するための演算子です。 | 文字列 演算子 文字列; | ||
---|---|---|---|
+ | 文字列を連結します。 | 例 : "文字列1" + "文字列2" | |
+= | 文字列を追加します。 | 例 : x += "文字列" |
まず、ビットについて説明します。CPUがデータを読み書きするとき、バイトを単位に読み書きしますが、この1バイトのメモリは、より細かく見ると8個のセルで構成されています。具体的に図で表現すると次のようになります。
セル(ビット) |
|
||||||||
ビット列 |
|
この1個のセルのことをビットと言います。ビットは記憶の最小単位で、「0」または「1」で記憶します。(コンピュータ内部では、文字も数値も「0」と「1」のビット単位で処理されています。)この8個のビットは切り離すことはできません。CPUはメモリのデータを8ビット丸ごと(つまり1バイトを単位として)読み書きします。左端のビットは最上位ビット(または第7ビット)、右端のビットは最下位ビット(または第0ビット)と呼ばれています。
しかし、これでは2以上の大きな数値を表すことができません。ではどう表すのか? もうお気付きになられたかと思います。そうです。2進数の考え方となってます。では、10進数から2進数へ変換してみましょう。さて変換方法ですが、ビットそれぞれには「桁の位」があります。ビットには2のn乗の「桁の位」を持たせています。例えば、8ビットの「桁の位」は以下のようになります。
ビット |
0
|
0
|
0
|
0
|
0 | 0 | 0 | 1 | |||||||
桁の位 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
ビットが1ならば「桁の位」を加算、0ならば加算しないというわけです。例えば10進数の15であれば8+4+2+1=15ですから以下のようになります。
ビット |
0
|
0
|
0
|
0
|
1 | 1 | 1 | 1 | |||||||||
桁の位 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |||||||||
|
|||||||||||||||||
10進数 |
0
|
+ |
0
|
+ |
0
|
+ |
0
|
+ | 8 | + | 4 | + | 2 | + | 1 | = | 15 |
10進数 |
ビット
|
||||||||
0
|
|
||||||||
1
|
|
||||||||
2
|
|
||||||||
4
|
|
||||||||
8
|
|
||||||||
16
|
|
||||||||
32
|
|
||||||||
64
|
|
||||||||
128
|
|
また、10進数はビットで表すと左表のようになります。
これらの数値の間には次のような関係があります。2は1の2倍、4は2の2倍、・・・、64は32の2倍、128は64の2倍となっています。1の位置に注目して見て下さい。そうです。2倍される毎に1が左へ1つずつビットシフトすることが分かると思います。
逆に、128から始めて、右へビットを1つずつシフトさせると、1/2ずつ小さくなっていることが分かると思います。
要するに数値を2倍するには、ビットを左へシフトし、1/2にするには右へシフトさせればよいのです。基本的にシフトして空いたところには 0 を入れます。これが符号を考慮しない論理シフトです。では3倍や5倍にするにはどうするのか?そういうときは、シフトと加算を組み合わせて計算します。例えば、10を3倍にするには、2倍
+ 1倍と考えて1ビットシフトしたものに10を足して(1倍だからね)下さい。
さて、2進数で負数(マイナス)を表すにはどうするのか?(「0」と「1」しか扱えないからね〜)
それは、2の補数を使います。求め方は、ビットを反転させて1を足します。
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2の8乗(2進数) | ||||||||
- | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 10進数の15 | ||||||||
|
|||||||||||||||||
1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 2の補数 |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 2進数の15 | |||||||||
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | ビット反転1⇔0 | |||||||||
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | + | 1 | 1を足す | |||||||
1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 2の補数と同じ! |
この補数表現の2進数の場合、先頭の1ビットを符号ビットとし、先頭の符号ビットは動かさずに左シフトのときは空いたところに 0 を、右シフトのときは空いたところに符号ビット(1)を入れます。このように符号を考慮するのが算術シフトです。
名称 | 論理積 | 論理和 | 排他的論理和 | ||||
10進数 | ビット | 10進数 | ビット | 10進数 | ビット | ||
11 | 1011 | 11 | 1011 | 11 | 1011 | ||
6 | 0110 | 6 | 0110 | 6 | 0110 | ||
演算結果 | 2 | 0010 | 15 | 1111 | 13 | 1101 |
ビット単位で処理をするための演算子です。値を32ビットの整数とみなしてビット演算をします。通常の乗算(*)除算(/)で計算するよりも計算が速いのが特徴です | 値 演算子 値; ビットシフトの場合は シフトされる値 演算子 シフト数; |
||
---|---|---|---|
~ | ビットの反転 | 例 : ~1 | 結果 : -2 |
& | ビットの論理積(AND)使用例はこちら | 例 : 11& 6 | 結果 : 2 |
| | ビットの論理和(OR) | 例 : 11 | 6 | 結果 : 15 |
^ | ビットの排他的論理和(XOR) | 例 : 11 ^ 6 | 結果 : 13 |
<< | ビットの算術(符号付)左シフト | 例 : 11 << 2 | 結果 : 44 |
>> | ビットの算術(符号付)右シフト | 例 : -11 >> 2 | 結果 : -3 |
>>> | ビットの論理(符号無し)右シフト | 例 : 11 >>> 2 | 結果 : 2 |
<<= | ビットの算術(符号付)左シフトの代入 | 例 : x <<= y (x = x << yと同じ) | |
>>= | ビットの算術(符号付)右シフトの代入 | 例 : x >>= y (x = x >> yと同じ) | |
>>>= | ビットの論理(符号無し)右シフトの代入 | 例 : x >>>= y (x = x >>> yと同じ) |
二つの評価する値が有り、どちらかの値を取得するための演算子です。 | 値(条件) 演算子 値1 : 値2; | ||
---|---|---|---|
? : | 条件がtrueのとき値1となり、さもなくば値2になります。 | 例 : limit = (age >= 16) ? "R指定" : "一般" |
数値、文字列、変数、オブジェクトなどの型(タイプ)を調べる演算子です。 | typeof(数値、文字列、変数、オブジェクトなど); | ||
---|---|---|---|
typeof() | 型(タイプ)を表す文字列を返します。 | 例 : typeof("文字列") | 結果 : string |
戻り値なしで式を評価する演算子です。式をハイパーリンクテキストとして指定できます。 | void(値、式); | ||
---|---|---|---|
void() | 戻り値を返しません。 | 例 : <a href="javascript:void(0)">クリックしても何も無し</a> |
JavaScriptで使用する記号です。 | |||
---|---|---|---|
[ ] | 配列の要素を括ります。 |
例 : dow = new Array(7); |
|
( ) | メソッドで指定する値、式を括ります。 | ||
. | JavaScriptの基本でも解説してますが、オブジェクト、プロパティ、メソッドを区切ります。 |
上に行くほど優先順位が高い。 | |||
---|---|---|---|
↑ 高 い |
( ) [ ] . | ||
! ~ - ++ -- typeof void | |||
* / % | |||
+ - | |||
<< >> >>> | |||
< <= > >= | |||
== != | |||
低 い ↓ |
& | ||
^ | |||
| | |||
&& | |||
|| | |||
?: | |||
= += -= *= /= %= <<= >>= &= ^= |= |