100天精通Golang(基础入门篇)——第6天: 深入解析Go语言中的运算符

news2024/11/25 8:23:41

在这里插入图片描述

🌷 博主 libin9iOak带您 Go to Golang Language.✨
🦄 个人主页——libin9iOak的博客🎐
🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐
🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐥

100天精通Golang(基础入门篇)

    • 摘要:
    • 引言:
  • 运算符
    • 一、运算符
      • 1.1 算术运算符
      • 1.2 关系运算符
      • 1.3 逻辑运算符
      • 1.4 位运算符
      • 1.5 赋值运算符
      • 1.6 运算符优先级
    • 今日学习总结:
  • 结语

摘要:

本文将介绍Golang中的各种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符。我们还将探讨运算符的优先级,以帮助读者更好地理解和使用Golang的运算符。

引言:

Golang是一种功能强大且易于学习的编程语言,它在开发高性能应用程序和分布式系统方面表现出色。熟练掌握Golang的基础知识对于成为一名优秀的开发人员至关重要。在本系列教程的基础入门篇中,我们将深入探讨Golang中的各个方面,从而帮助读者打下坚实的基础。本篇文章将专注于运算符,它们在编程中起着至关重要的作用。

运算符

表达式:(a + b) * c

a,b,c叫做操作数

+,*,叫做运算符

一、运算符

1.1 算术运算符

+ - * / %(求余) ++ --

代码案例:



package main

import "fmt"

func main() {
	/*
		算术运算符:+,-,*,/,%,++,--
		+
		-
		*,乘法
		/:取商,两个数相除,取商
		%:取余,取模,两个数相除,取余数

		++:给自己加1
			i++
		--:给自己减1
			i--

		整数
	*/
	a := 10
	b := 3
	sum := a + b
	fmt.Printf("%d + %d = %d\n", a, b, sum)

	sub := a - b
	fmt.Printf("%d - %d = %d\n", a, b, sub)

	mul := a * b
	fmt.Printf("%d * %d = %d\n", a, b, mul)

	div := a / b //取商
	mod := a % b //取余
	fmt.Printf("%d / %d = %d\n", a, b, div)
	fmt.Printf("%d %% %d = %d\n", a, b, mod)

	c := 3
	c++ //就是给c+1
	fmt.Println(c)

	c-- //给c减1
	fmt.Println(c)

}

运行结果:


GOROOT=D:\Go #gosetup
GOPATH=C:\Users\DELL\go #gosetup
D:\Go\bin\go.exe build -o C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day6_Operator.exe Day6-Operator #gosetup
C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day6_Operator.exe
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3
10 % 3 = 1
4
3

进程 已完成,退出代码为 0



在这里插入图片描述

1.2 关系运算符

== != > < >= <=

代码案例:


package main

import "fmt"

func main() {
	/*
		关系运算符:>,<,>=,<=,==,!=
			结果总是bool类型的:true,false
			==:表示比较两个数值是相等的
			!=:表示比较两个数值是不相等的
	*/
	a := 3
	b := 5
	c := 3
	res1 := a > b
	res2 := b > c
	fmt.Printf("%T,%t\n", res1, res1)
	fmt.Printf("%T,%t\n", res2, res2)

	res3 := a == b
	fmt.Println(res3)

	res4 := a == c
	fmt.Println(res4)

	fmt.Println(a != b, a != c)
}

运行结果:

GOROOT=D:\Go #gosetup
GOPATH=C:\Users\DELL\go #gosetup
D:\Go\bin\go.exe build -o C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_relational_operator_go.exe D:\GolandProjects\Day6-Operator\relational_operator.go #gosetup
C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_relational_operator_go.exe
bool,false
bool,true
false
true
true false

进程 已完成,退出代码为 0






运行截图:

在这里插入图片描述

1.3 逻辑运算符

运算符描述
&&所谓逻辑与运算符。如果两个操作数都非零,则条件变为真
||所谓的逻辑或操作。如果任何两个操作数是非零,则条件变为真
!所谓逻辑非运算符。使用反转操作数的逻辑状态。如果条件为真,那么逻辑非操后结果为假

代码案例:

package main

import "fmt"

func main() {
	/*
		逻辑运算符:操作数必须是bool,运算结果也是bool
		逻辑与:&&
			运算规则:所有的操作数都是真,结果才为真,有一个为假,结果就为假
				"一假则假,全真才真"
		逻辑或:||
			运算规则:偶有的操作数都是假,结果才为假,有一个为真,结果就为真
				"一真则真,全假才假"
		逻辑非:!
			!T-->false
			!F-->true
	*/
	f1 := true
	f2 := false
	f3 := true
	res1 := f1 && f2
	fmt.Printf("res1: %t\n", res1)

	res2 := f1 && f2 && f3
	fmt.Printf("res2: %t\n", res2)

	res3 := f1 || f2
	fmt.Printf("res3: %t\n", res3)
	res4 := f1 || f2 || f3
	fmt.Printf("res4: %t\n", res4)
	fmt.Println(false || false || false)

	fmt.Printf("f1:%t,!f1:%t\n", f1, !f1)
	fmt.Printf("f2:%t,!f2:%t\n", f2, !f2)

	a := 3
	b := 2
	c := 5
	res5 := a > b && c%a == b && a < (c/b)
	fmt.Println(res5)

	res6 := b*2 < c || a/b != 0 || c/a > b
	fmt.Println(res6)
	res7 := !(c/a == b)
	fmt.Println(res7)

}


运行结果:


res4: true
false
f1:true,!f1:false
f2:false,!f2:true
false
true
true

进程 已完成,退出代码为 0

运行截图:
在这里插入图片描述

1.4 位运算符

ABA&BA|BA^B
00000
01011
11110
10011

这里最难理解的就是^了,只要认为AB两者都相同的时候,为0,其他都为1

假设A为60,B为13

运算描述示例
&二进制与操作副本位的结果,如果它存在于两个操作数(A & B) = 12, 也就是 0000 1100
|二进制或操作副本,如果它存在一个操作数(A | B) = 61, 也就是 0011 1101
^二进制异或操作副本,如果它被设置在一个操作数就是按位取非(A ^ B) = 49, 也就是 0011 0001
&^二进制位清空&^(A&^B)=48,也就是110000
<<二进制左移位运算符。左边的操作数的值向左移动由右操作数指定的位数A << 2 =240 也就是 1111 0000
>>二进制向右移位运算符。左边的操作数的值由右操作数指定的位数向右移动A >> 2 = 15 也就是 0000 1111

代码案例:

package main

import "fmt"

func main() {
	/*
		位运算符:
			将数值,转为二进制后,按位操作
		按位&:
			对应位的值如果都为1才为1,有一个为0就为0
		按位|:
			对应位的值如果都是0才为0,有一个为1就为1
		异或^:
			二元:a^b
				对应位的值不同为1,相同为0
			一元:^a
				按位取反:
					1--->0
					0--->1
		位清空:&^
				对于 a &^ b
					对于b上的每个数值
					如果为0,则取a对应位上的数值
					如果为1,则结果位就取0

		位移运算符:
		<<:按位左移,将a转为二进制,向左移动b位
			a << b
		>>: 按位右移,将a 转为二进制,向右移动b位
			a >> b
	*/

	a := 60
	b := 13
	/*
		a: 60 0011 1100
		b: 13 0000 1101
		&     0000 1100
		|     0011 1101
		^	  0011 0001
		&^    0011 0000


		a : 0000 0000 ... 0011 1100
		^   1111 1111 ... 1100 0011
	*/
	fmt.Printf("a:%d, %b\n", a, a)
	fmt.Printf("b:%d, %b\n", b, b)

	res1 := a & b
	fmt.Println(res1) // 12

	res2 := a | b
	fmt.Println(res2) // 61

	res3 := a ^ b
	fmt.Println(res3) // 49

	res4 := a &^ b
	fmt.Println(res4) // 48

	res5 := ^a
	fmt.Println(res5)

	c := 8
	/*
		c : ... 0000 1000
		      0000 100000
		>>        0000 10
	*/
	res6 := c << 2
	fmt.Println(res6)

	res7 := c >> 2
	fmt.Println(res7)
}


运行结果:


a:60, 111100
b:13, 1101
12
61
49
48
-61
32
2

进程 已完成,退出代码为 0


运行截图:

在这里插入图片描述

1.5 赋值运算符

运算符描述示例
=简单的赋值操作符,分配值从右边的操作数左侧的操作数C = A + B 将分配A + B的值到C
+=相加并赋值运算符,它增加了右操作数左操作数和分配结果左操作数C += A 相当于 C = C + A
-=减和赋值运算符,它减去右操作数从左侧的操作数和分配结果左操作数C -= A 相当于 C = C - A
*=乘法和赋值运算符,它乘以右边的操作数与左操作数和分配结果左操作数C *= A 相当于 C = C * A
/=除法赋值运算符,它把左操作数与右操作数和分配结果左操作数C /= A 相当于 C = C / A
%=模量和赋值运算符,它需要使用两个操作数的模量和分配结果左操作数C %= A 相当于 C = C % A
<<=左移位并赋值运算符C <<= 2 相同于 C = C << 2
>>=向右移位并赋值运算符C >>= 2 相同于 C = C >> 2
&=按位与赋值运算符C &= 2 相同于 C = C & 2
^=按位异或并赋值运算符C ^= 2 相同于 C = C ^ 2
|=按位或并赋值运算符C |= 2 相同于 C = C | 2

代码案例:

package main

import "fmt"

func main() {
	/*
		赋值运算符:
			=,+=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=...
			=,把=右侧的数值,赋值给=左边的变量

			+=, a += b,相当于a = a + b
				a++, a += 1
	*/
	var a int
	a = 3
	fmt.Println(a)

	a += 4         // a = a + 4
	fmt.Println(a) // 7

	a -= 3
	fmt.Println(a) // 4
	a *= 2
	fmt.Println(a) // 8
	a /= 3
	fmt.Println(a) // 2
	a %= 1
	fmt.Println(a) // 0

}


运行结果:


3
7
4
8
2
0

进程 已完成,退出代码为 0

运行截图:

在这里插入图片描述

1.6 运算符优先级

有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

优先级运算符
7~ ! ++ –
6* / % << >> & &^
5+ - ^
4== != < <= >= >
3<-
2&&
1||

当然,你可以通过使用括号来临时提升某个表达式的整体运算优先级。

今日学习总结:

今天我们详细了解了Golang中的各种运算符。我们学习了算术运算符,用于执行基本的数学运算,关系运算符,用于比较两个值之间的关系,逻辑运算符,用于执行逻辑操作,位运算符,用于对二进制位进行操作,以及赋值运算符,用于给变量赋值。我们还了解了运算符的优先级,这对于正确理解表达式的计算顺序非常重要。通过深入学习和练习,我们现在对Golang的运算符有了更深入的理解,为进一步探索Golang的编程能力打下了坚实的基础。

在这里插入图片描述

结语

通过今天的学习,您已经踏上了Golang的学习之旅。在未来的日子里,您将探索Golang的各个方面,从基础概念到高级技巧,从实际应用到性能优化。
学习一门编程语言是一个持续的过程,每一天都是您向Golang的精通迈进的重要一步。我鼓励您坚持每天学习,保持热情和好奇心,解决挑战并享受成功的喜悦。

在您的学习旅程中,不要忘记参与社区和与其他Golang开发者交流。分享您的见解和经验,向他人学习,并在开源项目或实际应用中展示您的技能。

如果您在学习过程中遇到困难或有任何问题,不要犹豫向社区和专家寻求帮助。持续学习,勇敢探索,您将在Golang领域取得令人瞩目的成就。

最后,感谢您的阅读和支持!祝愿您在未来的每一天中都能够成为一名精通Golang的开发者!

期待听到您在学习过程中的进展和成就。如果您需要进一步的帮助,请随时告诉我。祝您在学习Golang的旅程中取得巨大成功!

如果您在学习过程中有任何疑惑,请点击下方名片,带您一对一快速入门 Go语言 的世界 ~

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

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

相关文章

Kafka详解(二)

Kafka命令行操作 [aahadoop102 ~]$ cd /opt/module/kafka/bin/ [aahadoop102 bin]$ ll 可以看到自带了zookeeper主题命令行操作 查看操作主题命令需要的参数 [aahadoop102 kafka]$ bin/kafka-topics.sh重要的参数如下查看当前服务器中的所有topic [aahadoop102 kafka]$ bin…

Socket 编程:基础概念辨析

文章目录 参考Socket APIBSD UNIX 操作系统BSD UNIX 与 Socket API Socket套接字套接字地址套接字 VS 套接字地址套接字的表示方法 TCP 套接字与 UDP 套接字TCP 套接字监听套接字连接套接字 UDP套接字 TCP 服务器端与 TCP 客户端通信的基本流程服务器端客户端 参考 项目描述刘…

大学物理(上)-期末知识点结合习题复习(4)——质点运动学-动能定理 力做功 保守力与非保守力 势能 机械能守恒定律 完全弹性碰撞

目录 1.力做功 恒力作用下的功 变力的功 2.动能定理 3.保守力与非保守力 4.势能 引力的功与弹力的功 引力势能与弹性势能 5.保守力做功与势能的关系 6.机械能守恒定律 7.完全弹性碰撞 题1 题目描述 题解 题2 题目描述 题解 1.力做功 物体在力作用下移动做功…

软件测试商城项目优惠券超发问题该怎么测试?

在拼夕夕面试中&#xff0c;面试官问了一连串经典的问题&#xff1a;“优惠券库存是怎么扣减的&#xff1f;开发为了解决超发优惠券问题而设计的方案&#xff0c;你了解过吗&#xff1f;你又是如何测试的呢&#xff1f;” 当时听到这些问题还挺懵的&#xff0c;没遇到过超发问…

MIsc(5)

ningen 打开后是一张生物图片&#xff0c;利用010打开后文件头没问题的&#xff0c;但是在文件末尾好像是包含了一个txt文件 拿到kali里利用binwalk分离出一个zip文件&#xff0c;但是需要密码打开 既然提示了资环4位数字的密码&#xff0c;那就可以直接爆破 获得flag 小明的保…

KCD 北京站报名开启 | 云原生英雄帖,邀您京城聚首

各位云原生社区侠客&#xff0c; 仲夏十七&#xff0c;风云际会。 江湖号召&#xff0c;原生论道。 2023 年 6 月 17 日&#xff0c;京城将迎来一场关于云原生的武林盛会——Kubernetes Community Days (KCD) 2023 北京站。 经过一轮公开的议题招募&#xff0c;KCD Beijing…

Jetpack Compose —— Image

在 Jetpack Compose 中&#xff0c;Image 是一个重要的组件&#xff0c;用于显示图像和处理图像相关的操作。 一、Image在Compose中的简单使用 二、如何网络调用Image 一、Image在Compose中的简单使用 首先&#xff0c;让我们了解一下 Image 组件的基本用法。要在 Jetpack C…

复习之linux系统中的软件管理

一、linux系统中软件包 1.软件包的类型 "注意在rhel8中只能使用绿色软件,源码编译软件和rpm软件" 类型支持的条件DEBUBlinux DEBlinux&#xff08;用不了&#xff09;RPM#redhat centOS fadorabz2|gz|xz#1.需要源码安装需要编译 #2.绿色软件,直接可用 #ntfs-3g_nt…

2023下半年杭州/广州/东莞/深圳软考(中/高级)认证,这里报名

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

如何成为一名全职创作者——程序员篇

哈喽大家好&#xff0c;我是咸鱼 今天跟大家分享一篇文章&#xff0c;这篇文章的作者 Gergely Orosz 是一名程序员&#xff0c;他从 Uber 辞职以后&#xff0c;就当起了全职创作者 他通过写文章、卖课程、做视频等谋生&#xff0c;今天这篇文章是他对这种商业模式的思考&…

内网渗透-windows远程用户管理

文章目录 0x01 获取window权限&#xff08;管理员&#xff09;0x02 添加用户&#xff0c;并且到管理员组0x03 开启远程桌面0x04 添加到远程桌面组0x05 进行远程0x06 免责声明 0x01 获取window权限&#xff08;管理员&#xff09; 使用cs上线用户 kali:192.168.253.234 window …

DVWA-10.XSS (DOM)

大约 “跨站点脚本 &#xff08;XSS&#xff09;”攻击是一种注入问题&#xff0c;其中恶意脚本被注入到原本良性和受信任的网站上。 当攻击者使用 Web 应用程序发送恶意代码&#xff08;通常以浏览器端脚本的形式&#xff09;时&#xff0c;就会发生 XSS 攻击&#xff0c; 给…

报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

问题&#xff1a; 测试接口发送请求时后端报错&#xff1a;org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input: expected close marker for Object (start marker at [Source: (PushbackInputStream); line: 1,…

Ubuntu18.04安装jdk1.8

1. 下载jdk 下载地址&#xff1a;jdk1.8下载地址 选择需要下载的jdk 2. 安装jdk # 创建用于存放jdk的文件夹 sudo mkdir /usr/local/java# 解压jdk压缩文件到 /usr/local/java/ sudo tar -zxvf jdk-8u371-linux-x64.tar.gz -C /usr/local/java/# 在配置文件中添加java 环境变…

作为自动化测试工程师,这4个自动化测试阶段你真的知道吗?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 阶段一&#xff1…

Linux—进程信号

进程信号 文章目录 进程信号感性理解信号技术应用角度上理解信号信号的产生按键产生信号系统调用产生信号给自己发送信号给进程发送指定信号 硬件产生信号除0操作野指针访问 软件产生信号alarm函数设置闹钟的软件条件 核心转储关于能否捕获全部信号 信号相关概念信号在内核中的…

码云实战(一)——idea实现将本地的项目推送到码云上

文章目录 前言一、创建本地仓库并关联二、将项目提交本地仓库三、关联远程仓库3.1 创建空白的远程库 四、推送到远程仓库五、验证是否推送成功总结 前言 本系列文章主要记录日常使用中碰到的码云的相关问题 一、创建本地仓库并关联 用IDEA打开项目&#xff0c;在菜单栏点击vc…

闪存潜规则:你的毛病比方案重要

大家好&#xff0c;我是了五月。 前言 目前绝大数存储设备都是以闪存为存储介质的&#xff0c;内部许多固件算法方案都是在为闪存服务的。 无论是什么算法&#xff0c;都是遵循着Flash的特性为前提的。 那闪存究竟有哪些潜规则的特性呢? 先擦后写 闪存块&#xff08;Bloc…

PCB设计总有几个阻抗没法连续的地方,怎么办?

大家都知道阻抗要连续。但是&#xff0c;PCB设计也总有阻抗不能连续的时候。怎么办? ​特性阻抗&#xff1a;又称“特征阻抗”&#xff0c;它不是直流电阻&#xff0c;属于长线传输中的概念。在高频范围内&#xff0c;信号传输过程中&#xff0c;信号沿到达的地方&#xff0c;…

CMU 15-445 Project #1 - Buffer Pool(Task #2 - LRU-K Replacement Policy)

Task #2 - LRU-K Replacement Policy 一、题目链接二、准备工作三、部分实现四、自定义测试用例 一、题目链接 二、准备工作 见 CMU 15-445 Project #0 - C Primer 中的准备工作。 三、部分实现 LRU-K的提出是为了更好地解决传统LRU中的缓存污染问题。所谓缓存污染&#xff0…