Go中使用操作符进行数学运算的示例代码

 更新时间:2023年10月08日 14:39:25   作者:CHQIUU  
在编程中有效地执行数学运算是一项需要开发的重要技能,本文主要介绍了Go中使用操作符进行数学运算的示例代码,具有一定的参考价值,感兴趣的可以了解一下

引言

数字在编程中很常见。它们用于表示诸如:屏幕尺寸、地理位置、金钱和点数、视频中经过的时间、游戏角色的位置、分配数字代码的颜色等等。

在编程中有效地执行数学运算是一项需要开发的重要技能,因为你经常会用到数字。虽然对数学的深入理解肯定可以帮助你成为更好的程序员,但这不是先决条件。如果你没有数学背景,试着把数学看作是一种工具来完成你想要达到的目标,是一种提高你逻辑思维的方法。

我们将使用Go中最常用的两种数字[数据类型]整数浮点数:

  • [Integers]是整数,可以是积极的,消极的,或0(…,-101,…)。
  • [Floats]是包含小数点的实数,例如9.0-2.25

本教程将回顾Go中可用于数字数据类型的运算符。

运算符

运算符是一个表示操作的符号或函数。例如,在数学中,加号或’ + '是表示加法的运算符。

在Go中,我们将看到一些从数学中引入的熟悉的操作符。不过,我们将使用的其他操作符是计算机编程特有的。

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

运算符返回什么
x + yx与y的和
x - yx和y的差值
-x改变x的符号
+xx的恒等式
x * yx和y的乘积
x / yx和y的商
x % yx / 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中,我们只能在相同的数据类型上使用操作符。我们不能将intfloat64相加

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:

优先级标志代表
1P括号
2E指数
3M乘法
4D除法
5A加法
6S减法

你可能熟悉另一个表示操作顺序的缩写,例如BEDMASBODMAS。无论哪种首字母缩写最适合您,在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 操作符数学运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决老版本goland无法调试新版本go的问题

    解决老版本goland无法调试新版本go的问题

    这篇文章主要给大家介绍了如何解决老版本goland无法调试新版本go的问题,文中通过代码示例给大家讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-11-11
  • goland远程调试k8s上容器的实现

    goland远程调试k8s上容器的实现

    本文主要介绍了goland远程调试k8s上容器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Go语言实现分布式锁

    Go语言实现分布式锁

    分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源时,需要通过一些互斥手段来防止彼此之间的干扰以保证一致性,在这种情况下,就需要使用分布式锁了
    2023-01-01
  • golang协程设计及调度原理

    golang协程设计及调度原理

    这篇文章主要介绍了golang协程设计及调度原理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • 解决Golang 中使用WaitGroup的那点坑

    解决Golang 中使用WaitGroup的那点坑

    这篇文章主要介绍了解决Golang 中使用WaitGroup的那点坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go语言如何并发超时处理详解

    Go语言如何并发超时处理详解

    大家都知道golang并没有在语言层次上提供超时操作,但可以通过一些小技巧实现超时。下面来一起看看吧,有需要的朋友们可以参考借鉴。
    2016-09-09
  • 简单四步快速集成go环境变量

    简单四步快速集成go环境变量

    这篇文章主要为大家介绍了快速集成go环境变量的简单四个步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • golang Gorm框架讲解

    golang Gorm框架讲解

    gorm是一个使用Go语言编写的ORM框架,这篇文章主要介绍了golang Gorm框架,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • GO语言获取系统环境变量的方法

    GO语言获取系统环境变量的方法

    这篇文章主要介绍了GO语言获取系统环境变量的方法,实例分析了Getenv方法操作环境变量的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 详解Go语言的计时器

    详解Go语言的计时器

    Go语言的标准库里提供两种类型的计时器Timer和Ticker。这篇文章主要介绍了Go语言的计时器的相关知识,需要的朋友可以参考下
    2020-05-05

最新评论