序章
プログラミングでは数字が一般的です。 これらは、画面サイズの寸法、地理的な場所、お金とポイント、ビデオで経過する時間、ゲームアバターの位置、数値コードの割り当てによる色などを表すために使用されます。
プログラミングで数学演算を効果的に実行することは、数値を扱う頻度が高いため、開発するための重要なスキルです。 数学の高度な理解は確かにあなたがより良いプログラマーになるのを助けることができますが、それは前提条件ではありません。 数学のバックグラウンドがない場合は、数学を、達成したいことを達成するためのツールとして、そして論理的思考を向上させる方法として考えてみてください。
Goで最もよく使用される2つの数値データ型、整数およびフロートを使用します。
このチュートリアルでは、Goの数値データ型で使用できる演算子を確認します。
オペレーター
演算子は、操作を示す記号または関数です。 たとえば、数学では、プラス記号または+
は加算を示す演算子です。
Goでは、数学から引き継がれたおなじみの演算子がいくつか表示されます。 ただし、使用する他の演算子は、コンピュータープログラミングに固有のものです。
これは、Goの数学関連の演算子のクイックリファレンステーブルです。 このチュートリアルでは、次のすべての操作について説明します。
手術 | それが返すもの |
---|---|
x + y
|
x とy の合計
|
x - y
|
x とy の違い
|
-x
|
x の符号を変更しました
|
+x
|
x のアイデンティティ
|
x * y
|
x とy の製品
|
x / y
|
x とy の商
|
x % y
|
x /y の残り
|
また、算術演算子と=
演算子を組み合わせた、+=
や*=
などの複合代入演算子についても説明します。
加減
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
加算はfloatでも同様に動作します。
e := 5.5 f := 2.5 fmt.Println(e + f)
Output8
2つのfloatを足し合わせたため、Goは小数点以下の桁数のfloat値を返しました。 ただし、この場合、小数点以下の桁数がゼロであるため、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では、同じデータ型でのみ演算子を使用できます。 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
目的の出力がfloatの場合は、除算する前に値を明示的に変換する必要があります。
これを行うには、希望するフロートタイプのfloat32()
またはfloat64()
を値にラップします。
package main import ( "fmt" ) func main() { s := 80 t := 6 r := float64(s) / float64(t) fmt.Println(r) }
Output13.333333333333334
モジュロ
%
演算子は、モジュロであり、除算後の商ではなく余りを返します。 これは、同じ数の倍数である数を見つけるのに役立ちます。
モジュロの例を見てみましょう。
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
に割り当てます。
プログラミング時には、変数の値に対して演算を実行し、結果の新しい値をその変数に割り当てる複合代入演算子を使用するのが一般的です。 これらの複合演算子は、算術演算子と=
演算子を組み合わせたものです。 したがって、加算のために、+
を=
と組み合わせて、複合演算子+=
を取得します。 それがどのように見えるか見てみましょう:
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
に乗算された*=
演算子のプロセスを自動化できました。番号2
を実行し、結果を変数w
に割り当てます。
Goには、このチュートリアルで説明する算術演算子ごとに複合代入演算子があります。
追加してから値を割り当てます。
y += 1
減算してから値を割り当てるには:
y -= 1
乗算してから値を割り当てるには:
y *= 2
除算してから値を割り当てます。
y /= 3
余りを返すには、次の値を割り当てます。
y %= 3
複合代入演算子は、物事を段階的に増減する必要がある場合、またはプログラム内の特定のプロセスを自動化する必要がある場合に役立ちます。
結論
このチュートリアルでは、整数および浮動小数点の数値データ型で使用する多くの演算子について説明しました。 さまざまなデータ型の詳細については、Goのデータ型についておよびデータ型の変換方法を参照してください。