前書き
数字はプログラミングでは一般的です。 これらは、画面サイズの大きさ、地理的位置、お金とポイント、ビデオを通過する時間、ゲームアバターの位置、数値コードの割り当てによる色などを表すために使用されます。
プログラミングで数学演算を効果的に実行することは、数字を扱う頻度が高いため、開発する重要なスキルです。 数学の高度な理解は確かに優れたプログラマーになるのに役立ちますが、それは前提条件ではありません。 数学のバックグラウンドがない場合は、数学を、達成したいことを達成するためのツールとして、また論理的思考を改善する方法として考えてみてください。
Goで最も使用されている2つの数値data types、integers、floatsを使用します。
このチュートリアルでは、Goの数値データ型で使用できる演算子を確認します。
オペレータ
operatorは、操作を示す記号または関数です。 たとえば、数学では、プラス記号または+
は加算を示す演算子です。
Goでは、数学から持ち込まれた使い慣れた演算子がいくつか表示されます。 ただし、使用する他の演算子はコンピュータープログラミングに固有のものです。
Goの数学関連演算子のクイックリファレンステーブルを次に示します。 このチュートリアルでは、次のすべての操作について説明します。
操作 | それが返すもの |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
また、算術演算子と=
演算子を組み合わせた、+=
や*=
などの複合代入演算子についても説明します。
加減
Goでは、加算演算子と減算演算子は数学と同じように機能します。 実際、Goプログラミング言語を計算機として使用できます。
整数から始めて、いくつかの例を見てみましょう。
fmt.Println(1 + 5)
Output6
整数をfmt.Println
ステートメントに直接渡す代わりに、次のような構文を使用して、整数値を表すように変数を初期化できます。
a := 88
b := 103
fmt.Println(a + b)
Output191
整数は正と負の両方の数値(および0も)であるため、正の数値に負の数値を追加できます。
c := -36
d := 25
fmt.Println(c + d)
Output-11
加算はフロートでも同様に動作します。
e := 5.5
f := 2.5
fmt.Println(e + f)
Output8
2つの浮動小数点数を一緒に追加したため、Goは小数点以下の桁数の浮動小数点数値を返しました。 ただし、この場合、小数点以下の桁数がゼロであるため、fmt.Println
は小数点以下のフォーマットを削除しました。 出力を適切にフォーマットするには、次の例のように、fmt.Printf
と動詞%.2f
を使用して小数点以下2桁にフォーマットします。
fmt.Printf("%.2f", e + f)
Output8.00
減算の構文は加算の構文と同じですが、演算子をプラス記号(+
)からマイナス記号(-
)に変更する点が異なります。
g := 75.67
h := 32.0
fmt.Println(g - h)
Output43.67
Goでは、同じdata typesでのみ演算子を使用できます。 int
とfloat64
を追加することはできません。
i := 7
j := 7.0
fmt.Println(i + j)
Outputi + j (mismatched types int and float64)
同じではないデータ型で演算子を使用しようとすると、コンパイラエラーが発生します。
単項算術演算
単項数式は、1つのコンポーネントまたは要素のみで構成されます。 Goでは、プラス記号とマイナス記号を値と組み合わせた単一の要素として使用して、値のID(+
)を返すか、値の符号を変更(-
)することができます。
一般的には使用されませんが、プラス記号は値のIDを示します。 正の値でプラス記号を使用できます。
i := 3.3
fmt.Println(+i)
Output3.3
負の値を持つプラス記号を使用すると、その値のIDも返されます。この場合、負の値になります。
j := -19
fmt.Println(+j)
Output-19
負の値の場合、プラス記号は同じ負の値を返します。
ただし、マイナス記号は値の符号を変更します。 したがって、正の値を渡すと、値の前のマイナス記号が負の値を返すことがわかります。
k := 3.3
fmt.Println(-k)
Output-3.3
または、負の値を持つ単項マイナス記号演算子を使用すると、正の値が返されます。
j := -19
fmt.Println(-j)
Output19
プラス記号とマイナス記号で示される単項算術演算は、+i
の場合は値のIDを返すか、-i
の場合は値の反対の符号を返します。
乗算と除算
加算と減算のように、乗算と除算は数学での方法と非常によく似ています。 Goで乗算に使用する符号は*
であり、除算に使用する符号は/
です。
Goで2つのfloat値を使用して乗算を行う例を次に示します。
k := 100.2
l := 10.2
fmt.Println(k * l)
Output1022.04
Goでは、除算する数値タイプに応じて、除算の特性が異なります。
整数を除算する場合、Goの/
演算子はフロア除算を実行します。ここで、商xの場合、返される数値はx以下の最大の整数です。
次の80 / 6
の除算の例を実行すると、出力として13
が返され、データ型はint
になります。
package main
import (
"fmt"
)
func main() {
m := 80
n := 6
fmt.Println(m / n)
}
Output13
目的の出力が浮動小数点数である場合、分割する前に値を明示的に変換する必要があります。
これを行うには、必要なフロートタイプのfloat32()
またはfloat64()
を値にラップします。
package main
import (
"fmt"
)
func main() {
s := 80
t := 6
r := float64(s) / float64(t)
fmt.Println(r)
}
Output13.333333333333334
モジュロ
%
演算子はmoduloであり、除算後の商ではなく余りを返します。 これは、同じ数の倍数である数を見つけるのに役立ちます。
モジュロの例を見てみましょう:
o := 85
p := 15
fmt.Println(o % p)
Output10
これを分解するには、85
を15
で割ると、5
の商と残りの10
が返されます。 モジュロ演算子は除算式の余りを返すため、プログラムはここで値10
を返します。
float64
データ型でモジュラス計算を行うには、math
パッケージのMod
関数を使用します。
package main
import (
"fmt"
"math"
)
func main() {
q := 36.0
r := 8.0
s := math.Mod(q, r)
fmt.Println(s)
}
Output4
演算子の優先順位
Goでは、数学のように、演算子は左から右または右から左ではなく優先順位の順に評価されることに留意する必要があります。
次の数式を見ると:
u = 10 + 10 * 5
左から右に読むこともできますが、最初に乗算が行われるため、u
を出力すると、次の値が返されます。
Output60
これは、10 * 5
が50
に評価され、10
を追加して、最終結果として60
を返すためです。
代わりに、値10
を10
に追加し、その合計に5
を掛けたい場合は、数学の場合と同じようにGoで括弧を使用します。
u := (10 + 10) * 5
fmt.Println(u)
Output100
操作の順序を覚えておく1つの方法は、頭字語PEMDASを使用することです。
注文 | 文字 | を意味する |
---|---|---|
1 |
P |
括弧 |
2 |
E |
指数 |
3 |
M |
乗算 |
4 |
D |
分割 |
5 |
A |
添加 |
6 |
S |
引き算 |
BEDMASやBODMASなど、演算の順序の別の頭字語に精通している場合があります。 頭字語が最適な場合は、Goで数学演算を実行するときに、期待する結果が返されるように覚えておいてください。
割り当て演算子
最も一般的な代入演算子は、すでに使用している演算子です。等号=
です。 =
代入演算子は、右側の値を左側の変数に割り当てます。 たとえば、v = 23
は、整数23
の値を変数v
に割り当てます。
プログラミング時には、変数の値に対して操作を実行し、結果の新しい値をその変数に割り当てる複合代入演算子を使用するのが一般的です。 これらの複合演算子は、算術演算子と=
演算子を組み合わせたものです。 したがって、追加のために、+` with `+=+` to get the compound operator `=+
を組み合わせます。 それがどのように見えるか見てみましょう:
w := 5
w += 1
fmt.Println(w)
Output6
まず、変数w
を5
の値と等しく設定し、次に+=
複合代入演算子を使用して、左側の変数の値に正しい数値を追加してから、結果はw
になります。
複合代入演算子は、for
ループの場合に頻繁に使用されます。これは、プロセスを複数回繰り返す場合に使用します。
package main
import "fmt"
func main() {
values := []int{0, 1, 2, 3, 4, 5, 6}
for _, x := range values {
w := x
w *= 2
fmt.Println(w)
}
}
Output0
2
4
6
8
10
12
for
ループを使用してvalues
と呼ばれるスライスを反復処理することにより、変数w
に数値%()を掛けた*=
演算子のプロセスを自動化することができました。 t4)sを実行し、結果を変数w
に割り当てます。
Goには、このチュートリアルで説明した算術演算子ごとに複合代入演算子があります。
値を追加して割り当てるには:
y += 1
減算して値を割り当てるには:
y -= 1
乗算してから値を割り当てるには:
y *= 2
分割して値を割り当てるには:
y /= 3
残りを返すには、値を割り当てます。
y %= 3
複合代入演算子は、物事を段階的に増減する必要がある場合、またはプログラムの特定のプロセスを自動化する必要がある場合に役立ちます。
結論
このチュートリアルでは、整数データ型と浮動数値データ型で使用する多くの演算子について説明しました。 Understanding Data Types in GoとHow To Convert Data Typesでさまざまなデータ型について詳しく知ることができます。