当前位置: 首页 > news >正文

Go学习第三章——运算符与进制

Go学习第三章——运算符与进制

      • 1 算术运算符
      • 2 关系运算符
      • 3 逻辑运算符
      • 4 赋值运算符
      • 5 其他运算符
        • 5.1 位运算符
        • 5.2 跟指针有关的运算符
      • 6 运算符的优先级
      • 7 获取用户终端输入
      • 8 进制转换
        • 8.1 进制基本使用
        • 8.2 进制之间的转换
        • 8.3 原码 反码 补码
        • 8.4 位运算符详解

运算符是—种特殊的符号,用以表示数据的运算、赋值和比较等

在这里插入图片描述

ps:没有三元运算符

1 算术运算符

  1. 算术运算符:+ ,-,*,/,%,++,–
  2. 介绍:算术运算符是对数值类型的变量进行运算的,比如,加减乘除。
  3. 细节说明:
  • 当对一个数取模时,可以等价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个星期零6134.2 对应的摄氏温度=19

2 关系运算符

  1. 关系运算符:==,!=,>,<,> =,<=
  2. 关系运算符的结果都是bool型,也就是要么是true,要么是false
  3. 关系表达式经常用在流程控制中

例子演示:

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 赋值运算符

  1. 赋值运算符:=,+=,-=,*=,/=,%=
  2. 赋值运算符就是将某个运算后的值,赋给指定的变量。

例子演示:

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

赋值运算符的特点:

  1. 运算顺序从右往左
  2. 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
  3. 复合赋值运算符等价于下面的效果,比如: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 进制基本使用

对于整数,有四种表示方式:

  1. 二进制:0,1 ,满 2 进 1。
    在 golang 中,不能直接使用二进制来表示一个整数,它沿用了 c 的特点。
  2. 十进制:0-9 ,满 10 进 1。
  3. 八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。
  4. 十六进制: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 远程命令执行

我举手向苍穹&#xff0c;并非一定要摘星取月&#xff0c;我只是需要这个向上的、永不臣服的姿态。 构造payload&#xff1a; /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过渡技术 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1…...

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是即插即用接口&#xff0c;可以将扫描仪、打印机、数码相机、闪存驱动器等计算机外围设备连接到计算机上。本篇文章就来介绍一下USB的一些基础知识&#xff0c;包括。 文章目录 1 接口类型和标准规范2 引脚分布3 …...

less和scss语法详解

比较好的博客文章&#xff1a;Less使用语法&#xff08;详细&#xff09;&#xff1a;https://blog.csdn.net/weixin_44646763/article/details/114193426 SCSS基本语法&#xff1a;https://www.jianshu.com/p/4efaac23cdb6 总结&#xff1a;我理解的点&#xff1a; 1、符号声…...

【计算机网络笔记】TCP/IP参考模型基本概念,包括五层参考模型

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…...

RSA加密与签名的区别

文章目录 一、签名验签原理二 RSAUtils 工具类三、通过x509Certificate来获取CA证书的基本信息四、 通过公钥获取公钥长度 一、签名验签原理 签名的本质其实就是加密&#xff0c;但是由于签名无需还原成明文&#xff0c;因此可以在加密前进行哈希处理。所以签名其实就是哈希加…...

arcgis js api 4.x通过TileLayer类加载arcgis server10.2发布的切片服务跨域问题的解决办法

1.错误复现 2.解决办法 2.1去https://github.com/Esri/resource-proxy 网站下载代理配置文件&#xff0c;我下载的是最新的1.1.2版本&#xff0c;这里根据后台服务器配置情况不同有三种配置文件&#xff0c;此次我用到的是DotNet和Java. 2.2 DotNet配置 2.2.1 对proxy文件增加…...

如何让chatGPT给出高质量的回答?

如何让chatGPT给出高质量的回答&#xff1f; ChatGPT从入门到进阶教程合集_哔哩哔哩_bilibili 公式 【指令词】【背景】【输入】【输出要求】 1. 指令词 ——精准任务or命令 如&#xff1a;简述、解释、翻译、总结、润色 2. 背景 ——补充信息 如&#xff1a;简述一篇讲解…...

Java后端开发(八)-- idea(2022版)将commit(未push)的 本地仓库 的 单条commit记录 进行撤销

目录 1.修改Test01类后,提交到本地仓库 。 2.commit成功后,在Git =》Log中会显示,commit记录...

Mysql架构解析,InnoDB架构概述。

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

jmeter如何测试websocket接口?

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

15 Transformer 框架概述

整体框架 机器翻译流程&#xff08;Transformer&#xff09; 通过机器翻译来做解释 给一个输入&#xff0c;给出一个输出&#xff08;输出是输入的翻译的结果&#xff09; “我是一个学生” --》&#xff08;通过 Transformer&#xff09; I am a student 流程 1 编码器和解…...

[架构之路-241]:目标系统 - 纵向分层 - 企业信息化与企业信息系统(多台企业应用单机组成的企业信息网络)

目录 前言&#xff1a; 一、什么是信息系统&#xff1a;计算机软件硬件系统 1.1 什么是信息 1.2 什么是信息系统 1.3 什么是信息技术 1.4 什么是信息化与信息化转型 1.5 什么是数字化与数字化转型&#xff08;信息化的前提&#xff09; 1.6 数字化与信息化的比较 1.7 …...

flink中使用异步函数的几个注意事项

背景 在flink系统中&#xff0c;我们为了补充某个流事件成一个完整的记录&#xff0c;经常需要调用外部接口获取一些配置数据&#xff0c;流事件结合这些配置数据就可以组合成一条完整的记录&#xff0c;然而如果同步调用外部系统接口来实现&#xff0c;那么会有很大的性能瓶颈…...

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)算法的一种延续。传统数据结构中对如何避免哈希冲突都有一定的描述和解释&#xff0c;但是这些描述和解释都是泛泛而谈&#xff0c;并没有提出比较好的解决方案。这里所提到的哈希树(HashTree)算法就是要提供一种在理论上和实际应用中均能有效地处…...

vue 项目启动后一直不断的刷新停不下来

新建的vue 项目&#xff0c;配置了代理后项目一直刷新&#xff0c;停不下来&#xff0c;各种查找最后发现是vue.config.js 中的热更新配置项目开启的原因 const {defineConfig } require(vue/cli-service) const AutoImport require(unplugin-auto-import/webpack) const Co…...

makesense在线yolov5标注

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

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...