【Go入門】Goで使用できる演算子とその仕様

シェアする

こんにちは。Go入門ブログの第7回です。
本記事では、Goで使用可能な演算子について解説します。

Goには三項演算子はありません。すべて二項または単項演算子になります。
ここでは算術演算子・比較演算子・論理演算子をそれぞれ二項・単項に分けて表にまとめ、注意すべき仕様について説明していきます。

算術演算子

+*/の四則演算子のみ整数と浮動小数点数、複素数をすべて対象にすることができます。
それ以外はすべて整数のみが対象です。

二項演算子
演算子

意味

用法・用途
+ 右辺と左辺を可算する
左辺から右辺を減算する
* 右辺と左辺を乗算する
/ 左辺を右辺で除算する
% 剰余 左辺を右辺で除算した余りを計算する
& 論理積 左辺と右辺のビット演算の論理積を計算する
| 論理和 左辺と右辺のビット演算の論理和を計算する
^ 排他的論理和 左辺と右辺のビット演算の排他的論理和を計算する
& ビットクリア 左辺と右辺のビット演算の論理積の否定を計算する
<< 左シフト 右辺の値だけ左辺を算術左シフトする
>> 右シフト 右辺の値だけ左辺を算術右シフトする

算術演算子はほぼ他のプログラミング言語と同様に使用できますが、商(/)の仕様には注意が必要です。

整数同士の割り算、例えば100 / 3の計算をおこなった場合、計算結果は33.333…の小数になるように思えます。
しかし、Goでは計算対象の数値が整数型(int)である場合、計算結果もintになります。この例では、小数点以下は切り捨てられて33が結果になります。

計算結果を小数として求めたい場合は、計算対象の数値をfloat64等の浮動小数点数型に変換しておく必要があります。

単項演算子
演算子

意味

用法・用途
+ 特に無し 後置の被演算子を0に足し合わせた値を得る
符号反転 後置の被演算子を0から引いた値を得る
^ ビットの補数 後置の被演算子の各ビットの否定を計算する

多くの言語ではビットの補数として0を使いますが、Goでは^を利用する点に注意してください。

インクリメント・デクリメントは演算子ではなくステートメント

JavaやCなど多くのプログラミング言語では、演算子としてインクリメントとデクリメントが実装されています。
インクリメントとは変数の値を1増やす演算で、デクリメントは変数の値を1減らす演算です。

Goでも、他のプログラミングと同様にインクリメント・デクリメントを行うことができます。

++ インクリメント 前置の被演算子に1を加算する
デクリメント 前置の被演算子から1を減算する

ただし、Goにおいては、インクリメントとデクリメントは演算子ではなくステートメントの扱いです。
したがって、++を式の中には埋め込むことはできません。
また、++およびを被演算子の前に記述することはできません。

比較演算子

比較演算子は左右に2つの被演算子をとり、論理値を返す式を構成します。

演算子

意味

用法・用途
== 等しい 左辺と右辺が等しければtrue
!= 等しくない 左辺と右辺が等しなければtrue
< 小なり 左辺が右辺より小さければtrue
<= 以下 左辺が右辺より小さいか等しければtrue
> 大なり 左辺が右辺より大きければtrue
>= 以上 左辺が右辺より大きいか等しければtrue

論理演算子

論理演算子は論理値または論理値を返す式を被演算子としてとり、論理値を返す式を構成します。

二項演算子
演算子

意味

用法・用途
&& AND 左辺と右辺の論理積を求める
OR 左辺と右辺の論理和を求める
単項演算子
演算子

意味

用法・用途
! NOT 右辺の否定を求める

演算子の計算順序

式の中に複数の演算子が記述されている場合、以下の規則に則って計算がおこなわれます。

  1. 単項演算子は二項演算子より先に演算される
  2. 二項演算子は優先度が高い順に演算される
  3. 優先順位が同じ二項演算子は、前から順に演算される

二項演算子の優先順位については、下表をご参照ください。

二項演算子の優先順位

二項演算子に設定されている[優先度]が大きいほど先に評価されます。

優先度 演算子
5 * / % <> & &^
4 + – | ^
3 == != < >=
2 &&
1 ||

優先度4~5が算術演算子です。乗算・除算が優先度5でもっとも優先度が高く、加算・減算とシフト演算が優先度4で続きます。

優先度3は比較演算子です。算術演算よりは後ですが、論理演算よりも先に評価されます。

優先度1~2は論理演算子です。&&(AND)||(OR)よりも先に計算されます。

終わりに

本記事では、Goで使用可能な演算子について解説を行いました。
演算子は多くのプログラミング言語で直感的に使用できるよう設計されていますが、それだけに細かな差異が原因で想定しない結果が生じやすい要素でもありますので注意しましょう。

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

フォローする

スポンサーリンク
スポンサーリンク