分类: Development Go 编程语言 其他
2019-05-15 15:01:41
数字在编程中很常见。 它们用于表示诸如以下内容:屏幕大小尺寸,地理位置,金钱和积分,视频中传递的时间量,游戏角色的位置,通过分配数字代码的颜色等等。
在编程中有效地执行数学运算是一项重要的技能,因为您将使用数字的频率。 虽然对数学的高层次理解当然可以帮助你成为一个更好的程序员,但它不是先决条件。 如果你没有数学背景,那就试着把数学看作是实现你想要达到的目标的工具,并且作为改善逻辑思维的一种方法。
我们将使用Go最常用的两种数值数据类型 , 整数和浮点数 :
本教程将回顾我们可以在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)
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中,我们只能在相同的数据类型上使用运算符。 我们不能添加int
和float64
:
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 | 小号 | 减法 |
您可能熟悉操作顺序的另一个缩写,例如BEDMAS或BODMAS 。 无论什么首字母缩略词最适合您,在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中的数据类型以及如何转换数据类型中了解有关不同数据类型的更多信息。
关注云架构公众号
Linux入门
QQ交流群:308781113