【初心者Unity】基本的なC#演算子のまとめ その1(算術・等値・比較・論理)
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
1.はじめに
本記事では、C#における演算子について解説していきます。
演算子全てを取り上げると長大になってしまうので、代表的なものだけピックアップしていきます。
➡【初心者Unity】基本的なC#演算子のまとめ その1(算術・等値・比較・論理)
【初心者Unity】基本的なC#演算子のまとめ その2(ビット・代入・三項・優先順位・結合規則)
2.演算子とは
演算子は、その名の通り、演算をするための記号のことです。
ここでいう演算とは、例えば四則演算のようなものを指します。
また、演算の対象となる値のことをオペランドといいます。
オペランドと演算子の組み合わせを式といいます。
また、式が表す値を得ることを評価と呼びます。
3.算術演算子
算術演算子は、四則演算を行うための演算子です。
演算子 | 名称 | 使用例 | 説明 |
---|---|---|---|
+ | 加算演算子 | x + y | xとyを足し合わせます |
– | 減算演算子 | x – y | xからyを引きます |
* | 乗算演算子 | x * y | xとyを掛け合わせます |
/ | 除算演算子 | x / y | xをyで割ります |
% | 剰余演算子 | x % y | xをyで割った余りを求めます |
+ | 単項プラス演算子 | +x | xを表します |
– | 単項マイナス演算子 | -x | xの符号を反転します |
++ | 前置インクリメント演算子 | ++x | xに1を足した後に式を評価します |
++ | 後置インクリメント演算子 | x++ | 式を評価した後に1を足します |
–– | 前置デクリメント演算子 | ––x | xから1引いた後に式を評価します |
–– | 後置デクリメント演算子 | x–– | 式を評価した後に1を引きます |
インクリメント及びデクリメントについて、具体例を挙げて解説します。
前置インクリメント
int preInc = 1; Debug.Log(++preInc); // 2 と表示 Debug.Log(preInc); // 2 と表示
2行目で前置インクリメントが行われています。
Debug.Log()は()内の式を評価した後にコンソール出力する関数ですが、前置インクリメントでは評価前に加算が行われるため、加算後の「2」が評価の結果として得られます。
また、3行目の結果を見てわかる通り、前置インクリメントによる加算は元の変数に反映されます。
すなわち、前置インクリメントを分解すると以下のような処理になります。
Debug.Log(++preInc); ↓ 分解すると preInc = preInc + 1; // 加算を先に実行(元の値に1加算した値を再代入) Debug.Log(preInc); // 評価値を出力
後置インクリメント
int postInc = 1; Debug.Log(postInc++); // 1 と表示 Debug.Log(postInc); // 2 と表示
2行目で後置インクリメントが行われています。
後置インクリメントでは評価後に加算が行われるため、加算前の「1」が評価の結果として得られます。
3行目は、前置インクリメントと同様で、元の変数に加算が反映されています。
後置インクリメントを分解すると以下のような処理になります。
Debug.Log(postInc++); ↓ 分解すると Debug.Log(postInc); // 評価値を出力 postInc = postInc + 1; // 加算を後に実行(元の値に1加算した値を再代入)
デクリメントについては割愛します。
前置後置の違いはインクリメントと同様で、加算ではなく減算が行われます。
4.等値演算子・比較演算子
等値演算子は、左右のオペランドが等しいかどうかを判定する演算子です。
比較演算子は、左右のオペランドの大小を比較する演算子です。
それぞれ、bool値として評価した結果が得られます。
演算子 | 名称 | 使用例 | 説明 |
---|---|---|---|
== | 等値演算子 | x == y | xとyが等しい場合にtrueになります |
!= | 非等値演算子 | x != y | xとyが等しくない場合にtrueになります |
> | 大なり演算子 | x > y | xがyよりも大きい場合にtrueになります |
>= | 以上演算子 | x >= y | xがy以上の場合にtrueになります |
< | 小なり演算子 | x < y | xがyよりも小さい場合にtrueになります |
<= | 以下演算子 | x <= y | xがy以下の場合にtrueになります |
5.論理演算子
論理演算子は、論理演算(論理積・論理和etc…)を行うための演算子です。
bool型のオペランドに対して使用できます。
演算子 | 名称 | 使用例 | 説明 |
---|---|---|---|
! | 論理否定演算子 | !x | xの論理否定を求めます |
& | 論理AND演算子 | x & y | xとyの論理積を求めます |
| | 論理OR演算子 | x | y | xとyの論理和を求めます |
&& | 条件付き論理AND演算子 | x && y |
xとyの論理積を求めます xがfalseの場合、yは評価されません |
|| | 条件付き論理OR演算子 | x || y |
xとyの論理和を求めます xがtrueの場合、yは評価されません |
^ | 論理排他的OR演算子 | x ^ y | xとyの排他的論理和を求めます |
左オペランド / 右オペランド | & | && | | | || | ^ |
---|---|---|---|---|---|
true / true | true | true | true | true | false |
true / false | false | false | true | true | true |
false / true | false | false | true | true | true |
false / false | false | false | false | false | false |
論理AND演算子と条件付き論理AND演算子、及び論理OR演算子と条件付き論理OR演算子の違いについて解説します。
論理AND演算子と条件付き論理AND演算子
論理AND演算子と条件付き論理AND演算子は左オペランドがfalseだった場合の動作が異なります。
AND演算では、左オペランドがfalseだった場合、右オペランドがtrue/falseどちらであっても、評価の結果はfalseになります。
すなわち、右オペランドを評価する必要が無いのです。
条件付き論理AND演算子では、無駄な処理はしない、ということで右オペランドの評価を行わない挙動になります。
具体的なソースコードで確認してみましょう。
int num = 1; Debug.Log(false & ++num > 1); // false と表示 論理AND演算子 Debug.Log(num); // 2 と表示 Debug.Log(false && ++num > 1); // false と表示 条件付き論理AND演算子 Debug.Log(num); // 2 と表示
2行目で論理AND演算子を使用しています。
右オペランドの++numは実行され、3行目に反映されています(numに1加算されています)。
一方、4行目の条件付き論理AND演算子では、右オペランドの++numが実行されません。
そのため、5行目のnumの出力結果は加算されたものになっていません。
論理OR演算子と条件付き論理OR演算子
論理OR演算子と条件付き論理OR演算子は左オペランドがtrueだった場合の動作が異なります。
OR演算では、左オペランドがtrueだった場合、右オペランドがtrue/falseどちらであっても、評価の結果はtrueになります。
すなわち、右オペランドを評価する必要が無いのです。
条件付き論理OR演算子では、無駄な処理はしない、ということで右オペランドの評価を行わない挙動になります。
具体的なソースコードで確認してみましょう。
int num = 1; Debug.Log(true | ++num > 1); // true と表示 Debug.Log(num); // 2 と表示 Debug.Log(true || ++num > 1); // true と表示 Debug.Log(num); // 2 と表示
2行目で論理OR演算子を使用しています。
右オペランドの++numは実行され、3行目に反映されています(numに1加算されています)。
一方、4行目の条件付き論理OR演算子では、右オペランドの++numが実行されません。
そのため、5行目のnumの出力結果は加算されたものになっていません。
続きます➡【初心者Unity】基本的なC#演算子のまとめ その2(ビット・代入・三項・優先順位・結合規則)