Goにおける基本演算子の体系と実践的活用

演算子の概要

演算子は、値に対する数学的または論理的な操作を指示する記号です。Go言語では、5つの主要な演算子カテゴリが定義されており、それぞれ異なる用途で使用されます。

カテゴリ 役割
算術演算子 数値の加減乗除および剰余計算
比較演算子 2つの値の大小・等価性を評価し、bool結果を返す
論理演算子 ブール値同士の結合(AND/OR)や反転(NOT)
ビット演算子 整数の各ビット単位での論理操作(AND/OR/XOR/シフト)
複合代入演算子 演算と代入を1ステップで行うショートハンド表記

算術演算子

数値計算の基本となる演算子です。注意点として、++および--は文(statement)であり、式(expression)ではないため、他の算術演算子とは分類が異なります。

演算子 動作例
+ 23 + 730
- 42 - 1824
* 9 * 872
/ 100 / 714(整数除算)
% 100 % 72(剰余)
package main

import "fmt"

func main() {
	var x int = 50
	var y float64 = 3.14
	x++
	y--
	fmt.Printf("x: %d, y: %.2f\n", x, y) // x: 51, y: 2.14
}

比較演算子

2つのオペランドを比較し、真偽値(trueまたはfalse)を返します。すべての比較演算子は左結合であり、型安全な比較が保証されます(型が異なる場合はコンパイルエラー)。

演算子 意味
> 左辺が右辺より大きい
< 左辺が右辺より小さい
== 左辺と右辺が等しい
>= 左辺が右辺以上
<= 左辺が右辺以下
!= 左辺と右辺が等しくない
package main

import "fmt"

func main() {
	a, b := 15, 8
	fmt.Println(a > b)   // true
	fmt.Println(a == b)  // false
	fmt.Println(a != 15) // false
}

論理演算子

ブール値の組み合わせや反転に使われ、条件分岐やループ制御で頻繁に利用されます。

演算子 動作
&& 両方のオペランドがtrueの場合のみtrue
|| いずれかのオペランドがtrueならtrue
! オペランドの真偽を反転(truefalsefalsetrue
package main

import "fmt"

func main() {
	age := 25
	hasLicense := true
	canDrive := age >= 18 && hasLicense
	isMinor := !(age >= 18)
	fmt.Println("運転可能:", canDrive) // true
	fmt.Println("未成年:", isMinor)     // false
}

ビット演算子

符号なし整数に対してビット単位の操作を行います。性能重視の処理やフラグ管理、メモリ効率化などに有効です。

演算子 説明
& ビットごとのAND(両方が1なら1)
| ビットごとのOR(どちらかが1なら1)
^ ビットごとのXOR(異なれば1)
<< 左シフト(2n倍)
>> 右シフト(2n分の1)

応用例:偶奇判定と単位定義

package main

import "fmt"

// 偶数判定(最下位ビットが0なら偶数)
func isEven(n uint) bool {
	return n&1 == 0
}

// バイト単位の定数定義(シフトによる2の累乗表現)
const (
	Byte     = 1 << iota // 1
	KibiByte               // 1024 = 2^10
	MebiByte               // 1048576 = 2^20
	GibiByte               // 1073741824 = 2^30
)

func main() {
	fmt.Printf("isEven(42): %t\n", isEven(42)) // true
	fmt.Printf("isEven(17): %t\n", isEven(17)) // false
	fmt.Printf("1 GiB = %d bytes\n", GibiByte)
}

複合代入演算子

演算と代入を同時に行う省略形で、コードの可読性と保守性を高めます。

演算子 等価な式
a += b a = a + b
a &= b a = a & b
a <<= n a = a << n
package main

import "fmt"

func main() {
	count := 10
	count += 5      // count = count + 5 → 15
	count &= 7      // count = count & 7 → 15 & 7 = 7
	count <<= 2     // count = count << 2 → 7 << 2 = 28
	fmt.Println(count) // 28
}

タグ: Go operators bitwise arithmetic logical

6月16日 23:49 投稿