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

news2024/11/17 3:47:02

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 = 8
	var a int

	//a = i++ // 错误
	//a = i-- // 错误
	// 下面这个做法也是错的
	/*if i++ >0 {
		fmt.Println("ok")
	}*/
	i++
	a = i
	fmt.Println("a的值:", a)

	//--i // 错误
	i--
	a = i
	fmt.Println("a的值:", a)
}

输出:

a的值: 9
a的值: 8

课堂练习:

func main() {
	// 假如还有97天放假,问:xx个星期零xx天
	var days int = 97
	var week int = days / 7
	var day int = days % 7
	fmt.Printf("%d个星期零%d天\n", week, day)

	// 定义一个变量保存华氏温度
	// 华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),求出华氏温度对应的摄氏温度。
	var huashi float32 = 134.2
	var 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 = 40
	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()
	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
	// 所以会发现输出的地方,并没有打印test
	fmt.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 = 10
	var b int = 1

	fmt.Println("b+=a前,b=", b)
	b += a
	fmt.Println("b+=a后,b=", b)
	fmt.Println()
	fmt.Println("b-=a前,b=", b)
	b -= a
	fmt.Println("b-=a后,b=", b)
	fmt.Println()
	fmt.Println("b*=a前,b=", b)
	b *= a
	fmt.Println("b*=a后,b=", b)
	fmt.Println()
	fmt.Println("b/=a前,b=", b)
	b /= a
	fmt.Println("b/=a后,b=", b)
	fmt.Println()
	fmt.Println("b%=a前,b=", b)
	b %= a
	fmt.Println("b%=a后,b=", b)
}

输出:

b+=a前,b= 1
b+=a后,b= 11

b-=a前,b= 11
b-=a后,b= 1

b*=a前,b= 1
b*=a后,b= 10

b/=a前,b= 10
b/=a后,b= 1

b%=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 = 18
    fmt.Println("age对应的存储空间的地址为:", &age) //age对应的存储空间的地址为: 0xc0000100b0
    var ptr *int = &age
    fmt.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 string
	var age byte
	var sale float32
	var isPass bool
	//方式一:使用fmt.Scanln()
	// 注意:只用使用&name,才会影响到这个name的值
	fmt.Println("请输入姓名 ")
	// 当执行程序到这里,程序会停止在这里,等到用户输入,并回车
	fmt.Scanln(&name)

	fmt.Println("请输入年龄 ")
	fmt.Scanln(&age)

	fmt.Println("请输入薪水 ")
	fmt.Scanln(&sale)

	fmt.Println("请输入是否通过考试 ")
	// 如果你输入是,返回的会是bool类型的默认值,false
	fmt.Scanln(&isPass)

	fmt.Printf("名字是 %v,年龄是 %v,薪水是 %v,是否通过考试 %v 。", name, age, sale, isPass)
}

输出:

请输入姓名
小智
请输入年龄 
18
请输入薪水 
11111
请输入是否通过考试 
true
名字是 小陈,年龄是 18,薪水是 11111,是否通过考试 true

方式二:使用fmt.Scanf()

func main() {
    var name string
    var age byte
    var sale float32
    var 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 = 011
    fmt.Println("八进制011的十进制值:", num8)

    // 十六进制
    var num16 int = 0x11
    fmt.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,即十进制的20
    fmt.Printf("%d << %d = %d\n", a, 1, a<<1)

    var b uint8 = 255 // 返回的类型是无符号整型 255的二进制是11111111
    // 输出 255 >> 1 = 127,11111111向右移动一位变成01111111,十进制为127
    fmt.Printf("%d >> %d = %d\n", b, 1, b>>1)
}

输出:

10 << 1 = 20
255 >> 1 = 127

第三章结束啦~~~冲冲冲,接着学!!!

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

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

相关文章

KubeSphere一键安装部署K8S集群(单master节点)-亲测过

1. 基础环境优化 hostnamectl set-hostname master1 && bash hostnamectl set-hostname node1 && bash hostnamectl set-hostname node2 && bashcat >> /etc/hosts << EOF 192.168.0.34 master1 192.168.0.45 node1 192.168.0.209…

python查询数据库发送邮件,附件csv格式,xlsx格式

# 设置liunx系统运行python代码的解释器 #!/usr/bin/python3# python声明文件的编码格式为UTF-8 # python2默认以ASCII编码来读取文件&#xff0c;如果不声明编码格式&#xff0c;它可能会无法正确地解析非ASCII字符&#xff08;比如中文字符&#xff09;。 # python3开始默认支…

【ACO-KELM预测】基于蚁群算法优化核极限学习机回归预测研究(matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

VS Code C# 开发工具包正式发布

前言 微软于本月正式发布Visual Studio Code C#开发工具包&#xff0c;此前该开发套件已经以预览版的形式在6月份问世。经过4个月的测试和调整&#xff0c;微软修复了350多个问题&#xff0c;其中大部分是用户反馈导致的问题。此外&#xff0c;微软还对产品进行了300多项有针对…

【MicroSoft Edge】格式化的显示JSON格式的数据

当我们没有进行任何操作的时候&#xff0c;默认浏览器给我们展示的JSON的数据是这样的&#xff1a; 看着十分不便。 解决方案&#xff1a; 首先点击 MicroSoft Edge 浏览器右上角的三点&#xff0c;如何选择扩展 点击 获取Microsoft Edge 扩展 搜索 JSONView&#xff0c;第一…

智慧公厕系列产品:为您提供更便捷、更卫生的厕所体验

智慧公厕系列产品致力于改善公共厕所的管理和使用体验&#xff0c;通过引入先进的科技和智能设备&#xff0c;提升厕所的安全、卫生、舒适性。这些产品涵盖了从厕位监测到环境调控&#xff0c;从安全防范到能耗监测的各个方面&#xff0c;为用户提供了一个更加方便、舒适、卫生…

【每日一题】做菜顺序

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贪心排序 写在最后 Tag 【贪心排序】【数组】【2023-10-22】 题目来源 1402. 做菜顺序 题目解读 每一道菜都有一个满足程度&#xff08;是一个整数&#xff09;&#xff0c;制作完成每道菜的时间为 1&#xff0c;每一…

Xray联动RAD实现自动扫描教程

Rad下载地址&#xff1a;https://github.com/chaitin/rad xray下载地址&#xff1a;https://github.com/chaitin/xray Xray启动监听&#xff1a; xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output xray-xxx.html RAD启动爬虫抓包&#xff1a; rad_win…

反射、枚举及lambda表达式

文章目录 一、反射1.1 定义和用途1.2 反射基本信息1.3 反射相关的类&#xff08;重要&#xff09;1.4 Class类&#xff08;反射机制的起源&#xff09;1.5 反射优缺点1.6 总结 二、枚举2.1 定义2.2 使用2.3 枚举优缺点2.4 枚举和反射2.5 总结 三、lambda表达式3.1 背景3.2 基本…

家庭WIFI路由器、无线网卡购买指南

一、参考资料 【Wi-Fi】802.11/802.11b/802.11g/802.11n/802.11a/802.11ac/802.11ax/802.11be 从带宽到路由&#xff0c;从有线到无线&#xff0c;从需求到选购&#xff0c;从布网到实测&#xff0c;全部说尽。基础篇&#xff08;1&#xff09; 【一文详解】802.11a/b/g/n/ac/…

【28】c++设计模式——>观察者模式(1)

观察者模式概念 C观察者模式&#xff08;Observer Pattern&#xff09;是一种设计模式&#xff0c;它用于在对象之间建立一种一对多的依赖关系。在该模式中&#xff0c;当一个对象&#xff08;称为主题&#xff09;发生变化时&#xff0c;所有依赖于它的对象&#xff08;称为观…

跳跃游戏Ⅱ-----题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 与Ⅰ不同的是&#xff0c;这次要求找出最小的跳跃次数。思路也很简单&#xff0c;在每一次跳跃之后都更新最远的跳跃距离。 举个列子&#xff1a; 输入&#xff1a;2,3,1,1,4 第一次…

【SSA-BP预测】基于麻雀算法优化BP神经网络回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Linux 中监控磁盘分区使用情况的 10 个工具

在本文[1]中&#xff0c;我们将回顾一些可用于检查 Linux 中磁盘分区的 Linux 命令行实用程序。 监控存储设备的空间使用情况是系统管理员最重要的任务之一&#xff0c;它可以确保存储设备上有足够的可用空间&#xff0c;以维持 Linux 系统的高效运行。 1. fdisk fdisk 是一个强…

STM32+摁键与定时器实现Led灯控制(中断)

中断作为单片机开发必须掌握的内容&#xff0c;它能够在不搭载操作系统的情况下让我们体验多任务处理的快感&#xff0c;保证了高优先级任务的实时性&#xff0c;同时系统中断也能够提供给用户在核心发生错误之后进行处理的机会。STM32F103系列单片机中断非常强大&#xff0c;每…

SpringBoot +JdbcTemplate+VUE 实现在线输入SQL语句返回数据库结果

文章目录 前言框架选型SpringBoot 结合JdbcTemplate简单示例SpringBoot 结合JdbcTemplate实现运行SQL处理思路后端处理前端处理 前言 想起来要做这个功能是因为我们公司的预生产环境和生产环境如果想要连接数据库都需要登录堡垒机&#xff0c;然后再通过堡垒机进行跳转到对应定…

1024 蓝屏漏洞攻防战(第十九课)

1024 蓝屏漏洞攻防战(第十九课) 思维导图 一 永恒之蓝的介绍 漏洞为外界所知源于勒索病毒的爆发,该病毒利用NSA(美国国家安全局)泄露的网络攻击工具 永恒之蓝( EternalBlue )改造而成,漏洞通过TCP的445和139端口,利用SMB远程代码执行漏洞,攻击者可以在目标系统上执行…

详解对于ReadView 机制如何判断当前事务能够看见

ReadView 机制就是用来判断当前事务能够看见哪些版本的&#xff0c;一个 ReadView 主要包含如下几个部分&#xff1a; m_ids&#xff1a;生成 ReadView 时有哪些事务在执行但是还没提交的&#xff08;称为 “活跃事务”&#xff09;&#xff0c;这些活跃事务的 id 就存在这个字…

for、while、do While、for in、forEach、map、reduce、every、some、filter的使用

for、while、do While、for in、forEach、map、reduce、every、some、filter的使用 for let arr [2, 4, 6, 56, 7, 88];//for for (let i 0; i < arr.length; i) {console.log(i : arr[i]) //0:2 1:4 2:6 3:56 4:7 5:88 }普通的for循环可以用数组的索引来访问或者修改…

AI篇-如何用AI辅助对图片进行鉴赏

前言 目录 前言 一、观众侧鉴赏图片 方法1&#xff1a;直接将图片发给文心一言&#xff0c;让文心一言分析。 方法2&#xff08;正确方法&#xff09;&#xff1a;将图片简单介绍并把图片发给文心一言&#xff0c;让文心一言分析。 二、作者介绍图片 方法&#xff08;正…