Go学习第三章——运算符与进制
Go学习第三章——运算符与进制
- 1 算术运算符
- 2 关系运算符
- 3 逻辑运算符
- 4 赋值运算符
- 5 其他运算符
- 5.1 位运算符
- 5.2 跟指针有关的运算符
- 6 运算符的优先级
- 7 获取用户终端输入
- 8 进制转换
- 8.1 进制基本使用
- 8.2 进制之间的转换
- 8.3 原码 反码 补码
- 8.4 位运算符详解
运算符是—种特殊的符号,用以表示数据的运算、赋值和比较等
ps:没有三元运算符
1 算术运算符
- 算术运算符:+ ,-,*,/,%,++,–
- 介绍:算术运算符是对数值类型的变量进行运算的,比如,加减乘除。
- 细节说明:
- 当对一个数取模时,可以等价
a%b=a-a/b*b
,这样就是取模的本质运算 - Golang的自增自减只能当作一个独立的语言使用,不能这样使用
b := a++
或者b := a--
- Golang的++和–只能写在变量的后面,不能卸载变量的前面,即:只有
a++ a--
没有++a --a
- Golang的设计者去掉c/java中的自增自减容易混淆的写法,让Golang更加简洁,统一。
例子演示:
func main() {var i int = 8var a int//a = i++ // 错误//a = i-- // 错误// 下面这个做法也是错的/*if i++ >0 {fmt.Println("ok")}*/i++a = ifmt.Println("a的值:", a)//--i // 错误i--a = ifmt.Println("a的值:", a)
}
输出:
a的值: 9
a的值: 8
课堂练习:
func main() {// 假如还有97天放假,问:xx个星期零xx天var days int = 97var week int = days / 7var day int = days % 7fmt.Printf("%d个星期零%d天\n", week, day)// 定义一个变量保存华氏温度// 华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),求出华氏温度对应的摄氏温度。var huashi float32 = 134.2var sheshi float32 = 5.0 / 9 * (huashi - 100)fmt.Printf("%v 对应的摄氏温度=%v \n", huashi, sheshi)
}
输出:
13个星期零6天
134.2 对应的摄氏温度=19
2 关系运算符
- 关系运算符:==,!=,>,<,> =,<=
- 关系运算符的结果都是bool型,也就是要么是true,要么是false
- 关系表达式经常用在流程控制中
例子演示:
func main() {fmt.Println(5 == 9) //判断左右两侧的值是否相等,相等返回true,不相等返回的是false, ==不是=fmt.Println(5 != 9) //判断不等于fmt.Println(5 > 9)fmt.Println(5 < 9)fmt.Println(5 >= 9)fmt.Println(5 <= 9)
}
输出:
false
true
false
true
false
true
3 逻辑运算符
逻辑运算符:&&(逻辑与/短路与),||(逻辑或/短路或),!(逻辑非)
与逻辑:&&
:两个数值/表达式只要有一侧是false,结果一定为false
也叫短路与:只要第一个数值/表达式的结果是false,那么后面的表达式等就不用运算了,直接结果就是false
或逻辑:||
:两个数值/表达式只要有一侧是true,结果一定为true
也叫短路或:只要第一个数值/表达式的结果是true,后面的表达式等就不用运算,直接就是true -->提高运算效率
非逻辑:!
:逻辑非运算符,!true就是false,!false就是true
例子演示:
func main() {var age int = 40fmt.Println("逻辑与(一边为false):", age < 35 && age == 40)fmt.Println("逻辑与(一边为true):", age > 35 && age > 40)fmt.Println("逻辑与(两边为true):", age > 35 && age == 40)fmt.Println("逻辑与(两边为false):", age > 35 && age < 40)fmt.Println()fmt.Println("逻辑或(一边为false):", age < 35 || age == 40)fmt.Println("逻辑或(一边为true):", age > 35 || age < 40)fmt.Println("逻辑或(两边为true):", age > 35 || age == 40)fmt.Println("逻辑或(两边为false):", age > 35 || age < 40)fmt.Println()// 短路,只要第一个数值为true,后面的表达式不用运算,直接就是true// 所以会发现输出的地方,并没有打印testfmt.Println("逻辑或(一边为true):", age > 35 || test())
}
输出:
逻辑与(一边为false): false
逻辑与(一边为true): false
逻辑与(两边为true): true
逻辑与(两边为false): false逻辑或(一边为false): true
逻辑或(一边为true): true
逻辑或(两边为true): true
逻辑或(两边为false): true逻辑或(一边为true): true
4 赋值运算符
- 赋值运算符:=,+=,-=,*=,/=,%=
- 赋值运算符就是将某个运算后的值,赋给指定的变量。
例子演示:
func main() {var a int = 10var b int = 1fmt.Println("b+=a前,b=", b)b += afmt.Println("b+=a后,b=", b)fmt.Println()fmt.Println("b-=a前,b=", b)b -= afmt.Println("b-=a后,b=", b)fmt.Println()fmt.Println("b*=a前,b=", b)b *= afmt.Println("b*=a后,b=", b)fmt.Println()fmt.Println("b/=a前,b=", b)b /= afmt.Println("b/=a后,b=", b)fmt.Println()fmt.Println("b%=a前,b=", b)b %= afmt.Println("b%=a后,b=", b)
}
输出:
b+=a前,b= 1
b+=a后,b= 11b-=a前,b= 11
b-=a后,b= 1b*=a前,b= 1
b*=a后,b= 10b/=a前,b= 10
b/=a后,b= 1b%=a前,b= 1
b%=a后,b= 1
赋值运算符的特点:
- 运算顺序从右往左
- 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
- 复合赋值运算符等价于下面的效果,比如:a+=3 等价于 a=a + 3
5 其他运算符
5.1 位运算符
5.2 跟指针有关的运算符
& :返回变量的存储地址
*:取指针变量对应的数值
func main() {var age int = 18fmt.Println("age对应的存储空间的地址为:", &age) //age对应的存储空间的地址为: 0xc0000100b0var ptr *int = &agefmt.Println("ptr对应的存储空间的地址为:", ptr)fmt.Println("ptr这个指针指向的具体数值为:", *ptr)
}
输出:
age对应的存储空间的地址为: 0x980a0b8
ptr对应的存储空间的地址为: 0x980a0b8
ptr这个指针指向的具体数值为: 18
6 运算符的优先级
Go语言有几十种运算符,被分成十几个级别,有的运算符优先级不同,有的运算符优先级相同,请看下表。
逗号的优先级是最低,括号(后缀运算符)优先级最高
为了提高优先级,就加()
括号
7 获取用户终端输入
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
有两种方式可以获取到键盘的输入:
**fmt.Scanln(a … interface{}) **在换行的时候停止,也就是获取一行的数据
**fmt.Scanf(format string, a … interface{}) **根据格式,把值传到变量里面
案例演示:
要求:可以从控制台接收用户信息,【姓名,年龄,薪水,是否通过考试】
方式一:使用fmt.Scanln()
func main() {var name stringvar age bytevar sale float32var isPass bool//方式一:使用fmt.Scanln()// 注意:只用使用&name,才会影响到这个name的值fmt.Println("请输入姓名 ")// 当执行程序到这里,程序会停止在这里,等到用户输入,并回车fmt.Scanln(&name)fmt.Println("请输入年龄 ")fmt.Scanln(&age)fmt.Println("请输入薪水 ")fmt.Scanln(&sale)fmt.Println("请输入是否通过考试 ")// 如果你输入是,返回的会是bool类型的默认值,falsefmt.Scanln(&isPass)fmt.Printf("名字是 %v,年龄是 %v,薪水是 %v,是否通过考试 %v 。", name, age, sale, isPass)
}
输出:
请输入姓名
小智
请输入年龄
18
请输入薪水
11111
请输入是否通过考试
true
名字是 小陈,年龄是 18,薪水是 11111,是否通过考试 true 。
方式二:使用fmt.Scanf()
func main() {var name stringvar age bytevar sale float32var isPass bool//方式二:使用fmt.Scanf(),可以按照指定的格式输入fmt.Println("请输入你的姓名,年龄,薪水,是否通过考试,使用空格隔开")fmt.Scanf("%s %d %f %t", &name, &age, &sale, &isPass)fmt.Printf("名字是 %v,年龄是 %v,薪水是 %v,是否通过考试 %v 。", name, age, sale, isPass)
}
输出:
请输入你的姓名,年龄,薪水,是否通过考试,使用空格隔开
小智 18 11111 true
名字是 小智,年龄是 18,薪水是 11111,是否通过考试 true 。
8 进制转换
8.1 进制基本使用
对于整数,有四种表示方式:
- 二进制:0,1 ,满 2 进 1。
在 golang 中,不能直接使用二进制来表示一个整数,它沿用了 c 的特点。 - 十进制:0-9 ,满 10 进 1。
- 八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。
- 十六进制:0-9 及 A-F,满 16 进 1. 以 0x 或 0X 开头表示。
此处的 A-F 不区分大小写。
func main() {var num int = 5// 二进制输出fmt.Printf("num的二进制:%b \n", num)// 八进制var num8 int = 011fmt.Println("八进制011的十进制值:", num8)// 十六进制var num16 int = 0x11fmt.Println("十六进制011的十进制值:", num16)
}
输出:
num的二进制:101
八进制011的十进制值: 9
十六进制011的十进制值: 17
8.2 进制之间的转换
略~~~~这里就不写了,网上大把!!
8.3 原码 反码 补码
略~~~~这里也不写了,网上大把!!
8.4 位运算符详解
&
按位与
运算符
|
按位或
运算符
^
按位异或
运算符
移位运算符
Golang中有2个移位运算符:>>、<< 右移和左移,运算规则:
右移运算符 >> :低位溢出,符号位不变,并用符号位补溢出的高位
左移运算符 << :符号位不变,低位补0
案例演示
func main() {a := 10 // 十进制10,二进制1010// 输出 10 << 1 = 20,10的二进制1010向左移1位是10100,即十进制的20fmt.Printf("%d << %d = %d\n", a, 1, a<<1)var b uint8 = 255 // 返回的类型是无符号整型 255的二进制是11111111// 输出 255 >> 1 = 127,11111111向右移动一位变成01111111,十进制为127fmt.Printf("%d >> %d = %d\n", b, 1, b>>1)
}
输出:
10 << 1 = 20
255 >> 1 = 127
第三章结束啦~~~冲冲冲,接着学!!!
相关文章:

Go学习第三章——运算符与进制
Go学习第三章——运算符与进制 1 算术运算符2 关系运算符3 逻辑运算符4 赋值运算符5 其他运算符5.1 位运算符5.2 跟指针有关的运算符 6 运算符的优先级7 获取用户终端输入8 进制转换8.1 进制基本使用8.2 进制之间的转换8.3 原码 反码 补码8.4 位运算符详解 运算符是—种特殊的符…...

H3C IMC dynamiccontent.properties.xhtm 远程命令执行
我举手向苍穹,并非一定要摘星取月,我只是需要这个向上的、永不臣服的姿态。 构造payload: /imc/javax.faces.resource/dynamiccontent.properties.xhtml pfdrtsc&lnprimefaces&pfdriduMKljPgnOTVxmOB%2BH6%2FQEPW9ghJMGL3PRdkfmbii…...

【技能树笔记】网络篇——练习题解析(八)
目录 前言 一、LAN技术 1.1 堆叠与集群 1.2 MSTP的特点 二、WAN技术 2.1 PPP链路建立 2.2 PPPoE 2.3 组播 2.3.1 组播的IP 2.3.2 组播分发树 2.3.3 组播协议 三、IPv6基础 3.1 IPv6地址 3.2 IPv6协议 3.3 IPv6过渡技术 总结 🌈嗨!我是Filotimo__…...
laravel框架介绍(二)
方法1.windows 可以直接下载 Composer-Setup.exe 方法2.配置php.exe目录环境变量,下载 composer.phar和php.exe平级目录, 新建 composer.bat 文件编辑以下内容 php "%~dp0composer.phar" %* 运行composer.bat ,出现版本号为成功 执行 composer self-update 以保持 Co…...

USB学习(1):USB基础之接口类型、协议标准、引脚分布、架构、时序和数据格式
连接计算机外围设备最简单的方法是通过USB(通用串行总线)。USB是即插即用接口,可以将扫描仪、打印机、数码相机、闪存驱动器等计算机外围设备连接到计算机上。本篇文章就来介绍一下USB的一些基础知识,包括。 文章目录 1 接口类型和标准规范2 引脚分布3 …...
less和scss语法详解
比较好的博客文章:Less使用语法(详细):https://blog.csdn.net/weixin_44646763/article/details/114193426 SCSS基本语法:https://www.jianshu.com/p/4efaac23cdb6 总结:我理解的点: 1、符号声…...

【计算机网络笔记】TCP/IP参考模型基本概念,包括五层参考模型
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...
RSA加密与签名的区别
文章目录 一、签名验签原理二 RSAUtils 工具类三、通过x509Certificate来获取CA证书的基本信息四、 通过公钥获取公钥长度 一、签名验签原理 签名的本质其实就是加密,但是由于签名无需还原成明文,因此可以在加密前进行哈希处理。所以签名其实就是哈希加…...

arcgis js api 4.x通过TileLayer类加载arcgis server10.2发布的切片服务跨域问题的解决办法
1.错误复现 2.解决办法 2.1去https://github.com/Esri/resource-proxy 网站下载代理配置文件,我下载的是最新的1.1.2版本,这里根据后台服务器配置情况不同有三种配置文件,此次我用到的是DotNet和Java. 2.2 DotNet配置 2.2.1 对proxy文件增加…...
如何让chatGPT给出高质量的回答?
如何让chatGPT给出高质量的回答? ChatGPT从入门到进阶教程合集_哔哩哔哩_bilibili 公式 【指令词】【背景】【输入】【输出要求】 1. 指令词 ——精准任务or命令 如:简述、解释、翻译、总结、润色 2. 背景 ——补充信息 如:简述一篇讲解…...
Java后端开发(八)-- idea(2022版)将commit(未push)的 本地仓库 的 单条commit记录 进行撤销
目录 1.修改Test01类后,提交到本地仓库 。 2.commit成功后,在Git =》Log中会显示,commit记录...

Mysql架构解析,InnoDB架构概述。
MySQL架构解析 Mysql整体架构 MySQL整体架构如下图所示: MySQL逻辑系统架构分为4层: 应用层MySQL服务层存储引擎层系统文件层 下面将对各层的功能和组件进行介绍,并探讨一条语句的执行过程。 应用层 应用层是MySQL体系架构的最上层,它…...

jmeter如何测试websocket接口?
jmeter做接口测试,很多人都是做http协议的接口,就有很多人问websocket的接口怎么测试啊? 首先,我们要明白,websocket接口是什么接口。 然后,我们怎么用jmeter测试? jmeter要测试websocket接口…...

15 Transformer 框架概述
整体框架 机器翻译流程(Transformer) 通过机器翻译来做解释 给一个输入,给出一个输出(输出是输入的翻译的结果) “我是一个学生” --》(通过 Transformer) I am a student 流程 1 编码器和解…...

[架构之路-241]:目标系统 - 纵向分层 - 企业信息化与企业信息系统(多台企业应用单机组成的企业信息网络)
目录 前言: 一、什么是信息系统:计算机软件硬件系统 1.1 什么是信息 1.2 什么是信息系统 1.3 什么是信息技术 1.4 什么是信息化与信息化转型 1.5 什么是数字化与数字化转型(信息化的前提) 1.6 数字化与信息化的比较 1.7 …...
flink中使用异步函数的几个注意事项
背景 在flink系统中,我们为了补充某个流事件成一个完整的记录,经常需要调用外部接口获取一些配置数据,流事件结合这些配置数据就可以组合成一条完整的记录,然而如果同步调用外部系统接口来实现,那么会有很大的性能瓶颈…...

QML之Repeater 控件使用
Repeater 控件是 重复作用 根据 model中的index 数量进行重复 废话不说 直接看如何用 当model 为数字时 Rectangle{height: 1200width: 500visible: trueanchors.fill: parentColumn{spacing: 20Repeater{model: 10delegate: Rectangle{width: 60height: 20color: index%2 …...
哈希树讲解
哈希树(HashTree)是哈希(Hash)算法的一种延续。传统数据结构中对如何避免哈希冲突都有一定的描述和解释,但是这些描述和解释都是泛泛而谈,并没有提出比较好的解决方案。这里所提到的哈希树(HashTree)算法就是要提供一种在理论上和实际应用中均能有效地处…...
vue 项目启动后一直不断的刷新停不下来
新建的vue 项目,配置了代理后项目一直刷新,停不下来,各种查找最后发现是vue.config.js 中的热更新配置项目开启的原因 const {defineConfig } require(vue/cli-service) const AutoImport require(unplugin-auto-import/webpack) const Co…...

makesense在线yolov5标注
文章目录 一、创建图片文件夹和label.txt二、在线标注数据 参考文章博主:风吹落叶花飘荡 一、创建图片文件夹和label.txt 创建一个放置图片的文件夹images,存放需要标注的图片(图片最好重命名为1,2,3…避免后面混淆) 创建label.t…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...