如何使用运算符进行数学运算

在编程中有效地执行数学运算是一项重要的技能,因为您将使用数字的频率。本教程将回顾我们可以在Go中使用整数和浮点数据类型的运算符。

数字在编程中很常见。 它们用于表示诸如以下内容:屏幕大小尺寸,地理位置,金钱和积分,视频中传递的时间量,游戏角色的位置,通过分配数字代码的颜色等等。

在编程中有效地执行数学运算是一项重要的技能,因为您将使用数字的频率。 虽然对数学的高层次理解当然可以帮助你成为一个更好的程序员,但它不是先决条件。 如果你没有数学背景,那就试着把数学看作是实现你想要达到的目标的工具,并且作为改善逻辑思维的一种方法。

我们将使用Go最常用的两种数值数据类型整数浮点数

  • 整数整数 ,可以是正数,负数或0(...,- -1 ,......)。
  • 浮点数是包含小数点的实数,如9.0-2.25 ..

本教程将回顾我们可以在Go中使用数字数据类型的运算符。

运营商

运算符是指示操作的符号或函数。 例如,在数学中加号或+是表示加号的运算符。

在Go中,我们将看到一些熟悉的数学运算符。 但是,我们将使用的其他运算符特定于计算机编程。

这是Go中与数学相关的运算符的快速参考表。 我们将在本教程中介绍以下所有操作。

手术 它返回什么
x + y xy总和
x - y xy差异
-x 改变了x标志
+x x身份
x * y xy乘积
x / y xy商数
x % y x / y余数

我们还将介绍复合赋值运算符,包括+=*= ,它们将算术运算符与=运算符组合在一起。

加减

在Go中,加法和减法运算符的表现就像在数学中一样。 实际上,您可以将Go编程语言用作计算器。

让我们看一些以整数开头的例子:

fmt.Println(1 + 5)
6

我们可以使用如下语法初始化变量以代表整数值,而不是将整数直接传递给fmt.Println语句:

a := 88
b := 103

fmt.Println(a + b)
191

因为整数可以是正数和负数(也是0),我们可以添加带正数的负数:

c := -36
d := 25

fmt.Println(c + d)
-11

添加将与浮动类似:

e := 5.5
f := 2.5

fmt.Println(e + f)
8

因为我们一起添加了两个浮点数,所以Go返回一个带小数位的浮点值。 但是,由于在这种情况下小数位为零, fmt.Println删除了小数格式。 要正确格式化输出,我们可以使用fmt.Printf和动词%.2f ,它将格式化为两个小数位,如下例所示:

fmt.Printf("%.2f", e + f)
8.00

除了我们将运算符从加号( + )更改为减号( - )之外,减法的语法与添加的语法相同:

g := 75.67
h := 32.0

fmt.Println(g - h)
43.67

在Go中,我们只能在相同的数据类型上使用运算符。 我们不能添加intfloat64

i := 7
j := 7.0
fmt.Println(i + j)
i + j (mismatched types int and float64)

尝试在不相同的数据类型上使用运算符将​​导致编译器错误。

一元算术运算

一元数学表达式仅由一个组件或元素组成。 在Go中,我们可以使用加号和减号作为单个元素与值配对:返回值的标识( + ),或更改值的符号( - )。

虽然不常用,但加号表示值的标识。 我们可以使用加号和正值:

i := 3.3
fmt.Println(+i)
3.3

当我们使用带负值的加号时,它也会返回该值的标识,在这种情况下,它将是负值:

j := -19
fmt.Println(+j)
-19

使用负值时,加号返回相同的负值。

但是,减号会改变值的符号。 因此,当我们传递一个正值时,我们会发现值前面的减号将返回一个负值:

k := 3.3
fmt.Println(-k)
-3.3

或者,当我们使用带有负值的减号一元运算符时,将返回正值:

j := -19
fmt.Println(-j)
19

由加号和减号表示的一元算术运算将在+i的情况下返回值的标识,或者在-i的情况下返回值的相反符号。

乘法和除法

像加法和减法一样,乘法和除法看起来与它们在数学中的表现非常相似。 我们将在Go中用于乘法的符号是* ,我们将用于除法的符号是/

这是一个使用两个浮点值在Go中进行乘法的示例:

k := 100.2
l := 10.2

fmt.Println(k * l)
1022.04

在Go中,除了我们要划分的数字类型之外,除法具有不同的特征。

如果我们分割整数,则Go的/运算符执行换层,其中对于商x ,返回的数字是小于或等于x的最大整数。

如果运行以下分割80/6的示例,则将获得13作为输出,数据类型将为int

package main

import (
    "fmt"
)

func main() {
    m := 80
    n := 6

    fmt.Println(m / n)
}
13

如果所需的输出是浮点数,则必须在除数前显式转换值。

您可以通过在您的值周围包装所需的浮点类型float32()float64()来执行此操作:

package main

import (
    "fmt"
)

func main() {
    s := 80
    t := 6
    r := float64(s) / float64(t)
    fmt.Println(r)
}
13.333333333333334

%运算符是模数 ,它返回余数而不是除法后的商。 这对于查找具有相同数字的倍数的数字非常有用。

我们来看一个模数的例子:

o := 85
p := 15

fmt.Println(o % p)
10

为了打破这一点, 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)
}
4

运营商优先权

在Go中,与数学一样,我们需要记住,操作符将按优先顺序进行评估,而不是从左到右或从右到左进行评估。

如果我们看下面的数学表达式:

u = 10 + 10 * 5

我们可以从左到右阅读它,但是首先会进行乘法,所以如果我们要打印u ,我们会得到以下值:

60

这是因为10 * 5计算结果为50 ,然后我们添加10作为最终结果返回60

如果我们想要将值10添加到10 ,然后将该和乘以5 ,我们在Go中使用括号,就像我们在数学中一样:

u := (10 + 10) * 5
fmt.Println(u)
100

记住操作顺序的一种方法是通过首字母缩略词PEMDAS

订购 信件 代表
1 P 括弧
2 Ë 指数
3 中号 乘法
4 d
一个 加成
6 小号 减法

您可能熟悉操作顺序的另一个缩写,例如BEDMASBODMAS 无论什么首字母缩略词最适合您,在Go中执行数学运算时都要记住这一点,以便返回您期望的结果。

分配运营商

最常见的赋值运算符是您已经使用过的运算符:等号= =赋值运算符将右侧的值赋给左侧的变量。 例如, v = 23将整数23的值赋给变量v

编程时,通常使用复合赋值运算符对变量的值执行操作,然后将得到的新值赋给该变量。 这些复合运算符将算术运算符与=运算符组合在一起。 因此,对于加法,我们将+=组合以获得复合运算符+= 让我们看看它是什么样的:

w := 5
w += 1
fmt.Println(w)
6

首先,我们将变量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)
    }

}
0
2
4
6
8
10
12

通过使用for循环遍历称为values的切片,您可以自动化*=运算符的过程,该过程将变量w乘以数字2 ,然后将结果分配回变量w

Go为本教程中讨论的每个算术运算符都有一个复合赋值运算符。

要添加然后分配值:

y += 1

要减去然后分配值:

y -= 1

乘以然后分配然后值:

y *= 2

要划分然后分配值:

y /= 3

要返回余数,请分配值:

y %= 3

当需要逐步增加或减少事物,或者需要在程序中自动执行某些过程时,复合赋值运算符非常有用。

结论

本教程介绍了许多将使用整数和浮点数值数据类型的运算符。 您可以在了解Go中的数据类型以及如何转换数据类型了解有关不同数据类型的更多信息。