サンプル・プログラム
算術演算子と式
ここで、たとえば [1 + 2] という加算式の場合、1と2をオペランド(operannd)、+を演算子(operator)と呼ぶ。そして、オペランドと演算子の組み合わせを式(expression)と呼ぶ。オペランドを2つ必要とする演算子を 2項演算子、1つだけのものを単項演算子と呼ぶ。
演算子 | 意味 |
---|---|
+ | 加算 |
- | 減算 |
* | 乗算 |
/ | 除算 |
% | 剰余算(余り) |
** | べき乗算 a ** b は a の b乗を計算する IE11ではサポートされていないので Math.pow() 関数で代用すること |
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let a = 3, b = 2;
23: let c;
24: document.getElementById('ret1').innerHTML = 'a = ' + a.toString();
25: document.getElementById('ret2').innerHTML = 'b = ' + b.toString();
26:
27: //加算
28: c = a + b;
29: document.getElementById('ret3').innerHTML = 'a + b = ' + c.toString();
30:
31: //減算
32: c = a - b;
33: document.getElementById('ret4').innerHTML = 'a - b = ' + c.toString();
34:
35: //乗算
36: c = a * b;
37: document.getElementById('ret5').innerHTML = 'a * b = ' + c.toString();
38:
39: //除算
40: c = a / b;
41: document.getElementById('ret6').innerHTML = 'a / b = ' + c.toString();
42:
43: //剰余算
44: c = a % b;
45: document.getElementById('ret7').innerHTML = 'a % b = ' + c.toString();
46:
47: //べき乗演算
48: c = a ** b;
49: document.getElementById('ret8').innerHTML = 'a ** b = ' + c.toString();
50:
51: //ゼロ除算
52: c = a / 0;
53: document.getElementById('ret9').innerHTML = 'a / 0 = ' + c.toString();
54: }
55: </script>
代入演算子
算術演算子と組み合わせた代入演算子も存在する。
たとえば \( x += 2 \) は、変数 \( x \) に2を加算し、変数 \( x \) に代入するという意味になる。
演算子 | 意味 |
---|---|
= | 代入 |
+= | 加算代入 |
-= | 減算代入 |
*= | 乗算代入 |
/= | 除算代入 |
%= | 剰余算代入 |
**= | べき乗算代入 IE11ではサポートされていないので Math.pow() 関数で代用すること |
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let a = 3, b = 2;
23: document.getElementById('ret1').innerHTML = 'a = ' + a.toString();
24: document.getElementById('ret2').innerHTML = 'b = ' + b.toString();
25:
26: //加算代入
27: b += a;
28: document.getElementById('ret3').innerHTML = 'b += a, b = ' + b.toString();
29:
30: //減算代入
31: b -= a;
32: document.getElementById('ret4').innerHTML = 'b -= a, b = ' + b.toString();
33:
34: //乗算代入
35: b *= a;
36: document.getElementById('ret5').innerHTML = 'b *= a, b = ' + b.toString();
37:
38: //除算代入
39: b /= a;
40: document.getElementById('ret6').innerHTML = 'b /= a, b = ' + b.toString();
41:
42: //剰余算代入
43: b %= a;
44: document.getElementById('ret7').innerHTML = 'b %= a, b = ' + b.toString();
45:
46: //べき乗算代入
47: b **= a;
48: document.getElementById('ret8').innerHTML = 'b **= a, b = ' + b.toString();
49: }
50: </script>
20: <script>
21: //ページのロード時に実行
22: window.onload = function() {
23: let a = 3, b = 2;
24: let c, d, e;
25: document.getElementById('ret1').innerHTML = 'a = ' + a.toString();
26: document.getElementById('ret2').innerHTML = 'b = ' + b.toString();
27:
28: //加算して代入
29: c = a + b;
30: document.getElementById('ret3').innerHTML = 'c = a + b = ' + c.toString();
31:
32: //代入結果を代入(1)
33: d = c = a + b;
34: document.getElementById('ret4').innerHTML = 'c = a + b = ' + c.toString();
35: document.getElementById('ret5').innerHTML = 'd = c = a + b = ' + d.toString();
36:
37: //代入結果を代入(2)
38: e = (c = a + b) * 2;
39: document.getElementById('ret6').innerHTML = 'c = a + b = ' + c.toString();
40: document.getElementById('ret7').innerHTML = 'e = (c = a + b) * 2 = ' + e.toString();
41: }
42: </script>
結合性
では、代入演算子の評価結果は何だろうか。これは、左辺の値そのものである。
ということは、式 d = c = a + b は、cの値をdに代入する意味であるから、変数cとdには同じ値が入ることになる。これを、代入演算子の結合性は右から左という。
さらに、d = (c = a + b) * 5 では、まず、c = a + b の結果に5を乗算する。乗算の結合性は左から右だ。その乗算の結果を、代入演算子により変数dに代入する。
演算子 | 意味 | 結合性 |
---|---|---|
+ | 加算 | 左から右 |
- | 減算 | |
* | 乗算 | |
/ | 除算 | |
% | 剰余算(余り) | |
** | べき乗算 | |
= | 代入 | 右から左 |
+= | 加算代入 | |
-= | 減算代入 | |
*= | 乗算代入 | |
/= | 除算代入 | |
%= | 剰余算代入 | |
**= | べき乗算代入 |
文字列演算子
たとえば s = 'abc' + 'def' では変数sに 'abcdef' が代入される。
演算子 | 意味 |
---|---|
+ | 結合 |
コラム:代入演算子
8080の加算命令は ADD r という単項演算子で、アキュムレータAとオペランドの加算結果をAに代入するというものだった。つまり代入演算子 a += b が、これに相当する。
アキュムレータというのは、CPUの中で演算を行うことができるレジスタ(変数のようなもの)である。8080 のアキュミュレータはAレジスタの1つしかなかった。
8080 には、他に汎用レジスタB, Cがある。これらを用いて a = b + c を実現するには
LD A,Bの2命令となる。
ADD C
機械語として2項演算子を実装してしまうと、組み合わせパターンが増えてしまい、それは回路が複雑になることを意味する。だから単項演算子しか実装されなかった。