如何在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 := 103fmt.Println(a + b)
Output191

因为整数既可以是正数,也可以是负数(0也是),所以可以将负数和正数相加:

c := -36
d := 25fmt.Println(c + d)
Output-11

浮点数的加法操作类似:

e := 5.5
f := 2.5fmt.Println(e + f)
Output8

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

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

减法的语法与加法相同,只是要把运算符从加号(+)改为减号(-):

g := 75.67
h := 32.0fmt.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.2fmt.Println(k * l)
Output1022.04

在Go中,根据我们除法的数值类型,除法具有不同的特征。

如果我们要除以整数,Go的/运算符会执行整除操作,对于商x,返回的是小于或等于x的最大整数。

如果你运行以下除以80 / 6的例子,你将得到13作为输出,数据类型将是int:

package mainimport ("fmt"
)func main() {m := 80n := 6fmt.Println(m / n)
}
Output13

如果期望的输出是浮点数,则必须在除法之前显式转换值。

你可以通过在你的值周围包装你想要的浮点类型float32()float64()来实现:

package mainimport ("fmt"
)func main() {s := 80t := 6r := float64(s) / float64(t)fmt.Println(r)
}
Output13.333333333333334

%操作符是,它返回除法后的余数而不是商。这对于查找是同一个数的倍数的数很有用。

来看一个求模的例子:

o := 85
p := 15fmt.Println(o % p)
Output10

具体来说,85除以15返回的是5的商余数10。我们的程序在这里返回值10,因为求模运算符返回除法表达式的余数。

要对float64数据类型进行模运算,你将使用math包中的Mod函数:

package mainimport ("fmt""math"
)func main() {q := 36.0r := 8.0s := 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 mainimport "fmt"func main() {values := []int{0, 1, 2, 3, 4, 5, 6}for _, x := range values {w := xw *= 2fmt.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

当需要递增或递减操作时,或者需要自动化程序中的某些过程时,复合赋值操作符可能很有用。

总结

本教程介绍了许多用于整数和浮点数数据类型的运算符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/99635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux中Crontab定时参数

注:图片转载于 点我进入图片出处 * * * * * sh /data/var/test.sh >> test_crontab_log.log分钟 0~59 0表示没分周 小时 0~23 0表示每小时 天 1~31 *表示每天 月 1~12 *表示每月 周 0~7 */0/7表示每周

centos 中:Nginx开启https和局域网访问配置

随着网络应用的普及,越来越多的服务和应用开始运行在互联网上。这些服务和应用需要保护用户数据的机密性、完整性和可用性。HTTPS作为一种可防止中间人攻击的加密通信协议,可以有效地保护用户数据的安全性和隐私性。同时,对于在局域网内部运行…

Javaweb中的servlet中的消息体是什么?

2023年10月9日,周一晚上 目录 什么是消息体 什么是HTTP响应 HTTP响应由谁产生,发给谁 响应头具体有什么内容 Content-Type的值怎么写 HTTP响应例子 什么是消息体 消息体(message body)指HTTP响应中的实体主体内容。 什么是HTTP响应 在HTTP响应中…

MTK Logo 逆向解析之 rawx 全解压

紧接上一篇 MTK Logo 逆向解析之 bin 转 rawx 查看 zpipe 源码发现压缩使用 zlib 算法,其中也包含了解压的代码,但直接执行发现并不好使,有bug。很明显 mtk 并没有真正用过解压,那就需要我们自己来修复一下了,总比没…

MR混合现实在石油化工课堂教学中的应用演示

MR混合现实是一种结合虚拟现实(VR)和增强现实(AR)的技术。它不仅能创造出逼真的虚拟环境,还能实时地将数据、图像和信息叠加在真实世界中,为教学提供了无限可能。通过MR混合现实,学生可以在安全…

4D5D影院设备发展前景7D互动影院体验馆应用

5D影院设备发展前景广阔。随着科技的不断进步,5D影院设备在电影行业中的应用越来越广泛。5D影院设备以其独特的沉浸式体验和互动性,吸引了大量观众。未来,随着技术的不断创新和成本的降低,5D影院设备将会得到更多的应用和推广。 首…

微信小程序抓包

https://github.com/water-kid/WeChatOpenDevTools 抓包工具 第一次安装成功了,公众号能抓,,小程序报错,,卸载后安装不起了 方法二: 将version.dll 放入 微信所在目录 E:\Program Files\Tencent\WeChat\[…

黑盒测试方法:原理+实战

目录 一、如何设计测试用例 二、黑盒测试常用方法 1、基于需求进行测试用例的设计 2、等价类 3、边界值 4、判定表分析法(因果分析法) 5、正交表 6、场景设计法 三、案例补充 1、使用Fiddler模拟弱网 2、针对一个接口该如何测试 一、如何设计测试…

2023Node.js零基础教程(小白友好型),nodejs新手到高手,(二)NodeJS入门——buffer模块、计算机基础、fs模块、path模块

就算步子乱了又如何,接着跳下去就好了。——《闻香识女人》 开始 011_Buffer_介绍与创建 hello,大家好,我们来学习一下buffer。首先来看看 buffer 是一个什么东东。buffer,中文译为缓冲区,是一个类似于数组的对象&am…

视频通话中的Camera操作

视频通话也有打开本地摄像头预览的场景,但打开本地Camera预览逻辑,并非在Dailer APP中实现,具体流程图如下。 Dialer app中只调用 1、setCamera用于打开摄像头 相关动作在Ims apk中实现,open函数最后调用了VTSource.java中的doOp…

“比特币震荡中的秘密信号?技术分析揭示最近走势的关键!“

技术分析 比特币维持在 27,000 美元的支撑位,甚至在此价格水平上形成了新的更高低点。这标志着一个非常有利的发展,表明每小时和每日时间框架上的看涨趋势。 然而,当考虑每周和每月的观点时,我们仍然遇到阻力,这可以…

文本编辑器去除PDF水印

用文本编辑器打开pdf,搜索水印的特殊文字,全部替换。 另外一个水印字母间有空格。 替换完后保存。 重新打开pdf:

基于 ACK Fluid 的混合云优化数据访问(一):场景与架构

作者:车漾(必嘫) 本系列文章将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景。 概述 在 AI 和大数据时代,算力即正义,强大的算力推动了源源不断的创新。然而,企业自建的算力集群存在资源容量和…

浏览器插件开发爬虫记录

常用爬虫有各种各样的反爬限制,而如果是小数据量并且该网站反爬手段非常厉害的前提下,可以考虑使用浏览器插件作为爬虫手段 基本代码来源于这位博主分享的插件代码, 主要在他的基础上加了 请求代理、管理面板、脚本注入拦截到的请求数据和管…

最新AI智能创作系统源码AI绘画系统/支持GPT联网提问/支持Prompt应用

AI绘图专业设计 不得将程序用作任何违法违纪内容,不要让亲人两行泪 界面部分图解构: 前台show: 前端部署: 安装pm2管理器 点击设置 选择v16.19.1版本-切换版本 再新建一个网站 点击设置 添加反向代理-代理名称随便…

【轻松玩转MacOS】安全隐私篇

引言 这一篇将介绍如何保护MacOS的安全,包括如何设置密码,使用防火墙,备份数据等重要环节,避免因不慎操作或恶意攻击带来的安全风险,让你的MacOS之旅更安心、更放心。 一、设置密码:保护你的MacOS的第一道…

windows下在cmd和git bash中执行bash download.sh失败

cmd报错信息: 解决办法: win64-wget-1.21.4 安装软件wget,如下这是64位的包,解压后,下面有个wget.exe,拷贝到C:\Windows\System32、 然后打开cmd,执行wget -V 如上,有版本信息就O…

C语言内存函数

目录 memcpy(Copy block of memory)使用和模拟实现memcpy的模拟实现 memmove(Move block of memory)使用和模拟实现memmove的模拟实现: memset(Fill block of memory)函数的使用扩展 memcmp(Compare two blocks of memory)函数的使用 感谢各位大佬对我的支持,如果我的文章对你有…

教资成绩什么时候出来 2023教资笔试成绩查询时间介绍

上半年教资笔试成绩查询开放时期为2023年4月13日,面试成绩查询开放时间在6月14日。而下半年教资笔试成绩查询开放时间为2023年11月8日,2023下半年教资面试时间是2023年12月9日-10日。 值得一提的是如果考生对成绩有异议的话,还可以在成绩公布…

解决远程视频会议卡顿问题,优化企业网络办公体验

视频会议、在线语音这种交互类的应用都是对网络链路质量有高要求的场景, 而造成视频会议卡顿的原因也是有多方面因素的,比如视频应用服务器或者终端的原因造成,网络当然也是其中很重要的一个因素,比如网络线路质量不稳定&#xff…