Go中使用操作符进行数学运算的示例代码
引言
数字在编程中很常见。它们用于表示诸如:屏幕尺寸、地理位置、金钱和点数、视频中经过的时间、游戏角色的位置、分配数字代码的颜色等等。
在编程中有效地执行数学运算是一项需要开发的重要技能,因为你经常会用到数字。虽然对数学的深入理解肯定可以帮助你成为更好的程序员,但这不是先决条件。如果你没有数学背景,试着把数学看作是一种工具来完成你想要达到的目标,是一种提高你逻辑思维的方法。
我们将使用Go中最常用的两种数字[数据类型]整数和浮点数:
- [Integers]是整数,可以是积极的,消极的,或0(…,
-1
,0
,1
,…)。 - [Floats]是包含小数点的实数,例如
9.0
或-2.25
…
本教程将回顾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
浮点数的加法操作类似:
e := 5.5 f := 2.5 fmt.Println(e + f)
Output8
因为我们将两个浮点数相加,所以Go返回了一个带小数点的浮点值。然而,由于在本例中小数点是零,fmt.Println
删除了小数格式。为了正确格式化输出,我们可以使用fmt.Printf
和动词%.2f
,它将格式化为两位小数,如下例所示:
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)
试图在不相同的数据类型上使用运算符将导致编译器错误。
一元数学表达式
一元数学表达式只包含一个成分或元素。在Go中,我们可以使用加号和减号作为单个元素与值配对:返回值的单位符号(+
),或更改值的符号(-
)。
虽然加号不常用,但它表示值的身份。我们可以使用加号来表示正数:
i := 3.3 fmt.Println(+i)
Output3.3
当我们用加号表示一个负数时,它也会返回该值的标识符,在这个例子中,它会返回一个负数:
j := -19 fmt.Println(+j)
Output-19
对于负数,加号返回相同的负数。
然而,减号会改变值的正负号。因此,当我们传入一个正值时,我们会发现值之前的减号将返回负值:
k := 3.3 fmt.Println(-k)
Output-3.3
或者,当使用减号操作符处理负数时,将返回一个正数:
j := -19 fmt.Println(-j)
Output19
由加号和减号表示的一元算术运算将返回值的恒等符号(如+i
),或相反的符号(如-i
)。
乘法和除法
就像加法和减法一样,乘法和除法看起来很像数学中的运算。我们将在Go中用于乘法的符号是*
,用于除法的符号是/
。
下面是用两个浮点数在Go中做乘法的例子:
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
模
%
操作符是模,它返回除法后的余数而不是商。这对于查找是同一个数的倍数的数很有用。
来看一个求模的例子:
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
记住运算顺序的一种方法是使用缩写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中使用操作符进行数学运算的示例代码的文章就介绍到这了,更多相关Go 操作符数学运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论