go破冰之旅·7·go中各种运算符(二)

news/2024/9/21 5:48:12

 一次5-10分钟即可搞定,实用+效率!

上文提到go中各种运算符(一)本文继续补充关系运算符、位运算符及混合应用。

目录

关系运算符

位运算符

混合应用(重要)


关系运算符

包括==、>、<、>=、<=、!=   是不是很面熟,我们快速过一下:

	var a, b = 1, 2
	c := a + b
	d := 1
	fmt.Printf("a>b: %v\n", a > b)
	fmt.Printf("a<b: %v\n", a < b)
	fmt.Printf("c>=b: %v\n", c >= b)
	fmt.Printf("a<=c: %v\n", a <= c)
	fmt.Printf("a!=c: %v\n", a != c)
	fmt.Printf("a==d: %v\n", a == d)

speed running:

a>b: false
a<b: true
c>=b: true
a<=c: true
a!=c: true
a==d: true

位运算符

&:按位与

|:按位或

^:按位异或,二进制位相异为1

<<:左移运算符,左移n位相当于*2的n次方

>>:右移运算符,右移n位相当于除以2的n次方

我们设定下面两个数来模拟一下:

	var (
		a = 52  // 0011 0100
		b = 93  // 0101 1101
	)

	fmt.Printf("a & b = %v\n", a & b)
	fmt.Printf("a | b = %v\n", a | b)
	fmt.Printf("a ^ b = %v\n", a ^ b)
	fmt.Printf("a << 2 = %v\n", a << 2)
	fmt.Printf("a >> 3 = %v\n", a >> 3)
	fmt.Printf("b >> 3 = %v\n", b >> 3)

按既定规则分析推演:

	a=0011 0100
	b=0101 1101
	推算:
	&=0001 0100  =  20
	|=0111 1101  =  125
	^=0110 1001  =  105
	a << 2:
	  1101 0000  =  208
	a >> 3:
	  0000 0110  =  6
	b >> 3:
	  0000 1011  =  11

来看看结果对不对,speed running:

a & b = 20
a | b = 125
a ^ b = 105
a << 2 = 208
a >> 3 = 6
b >> 3 = 11

混合应用(重要)

这里综合了常见玩法,重点看看:

	var (
		a, b = 1, 8
		c    int
		d    *int
	)

	fmt.Printf("(a+c)*b = %v\n", (a+c)*b)     // (1+0)*8=8
	fmt.Printf("(a+a)*b/4 = %v\n", (a+a)*b/4) // (1+1)*8/4=4
	fmt.Printf("a+5*b/2*2 = %v\n", a+5*b/2*2) // 1+5*8/2*2=41
	fmt.Printf("a+b/2*4 = %v\n", a+b/2*4)     // 1+8/2*4=17

	// %T可直接打印类型
	fmt.Printf("d = %v, type=%T\n", d, d) // d = <nil>, type=*int  d只声明但没有赋值,因此是nil(nil表示变量未开辟空间)

	// &可用于取地址,*可用来解引用,这两是相反的操作,下面看看它们的玩法
	fmt.Printf("&c = %v, &d = %v\n", &c, &d) // 先打印地址看看
	//fmt.Printf("*d = %v\n", *d) // d是nil,因此这样直接使用会报panic: runtime error: invalid memory address or nil pointer dereference

	// 我们尝试修改a
	a = 2
	fmt.Printf("a = %v\n", a) // 修改成功
	*&a = 3                   // &a存储的是a变量地址,*&a相当于取址的反向操作,也相当于a赋值为2
	// 再次看看a
	fmt.Printf("a = %v\n", a) // 修改成功

	// 那么d是nil,*d直接空指针,就没办法设置d的值了吗?当然不是,我们来试试
	d = &a                                          // 让d指向a的地址,此时d和a都是同一个地址的值,也就是d的值成了3,这是d已经不是nil了
	fmt.Printf("&a=%v, d=%v, *d = %v\n", &a, d, *d) // 此时a和d地址相同,值相同

	// 下面看看布尔值结合==运算的另一种玩法
	var e bool
	f := true
	f = e == false
	// e==false仅是一个条件判断
	// 因e为false,则e == false结果为真,所以f=true
	fmt.Printf("e = %v, f = %v\n", e, f)

	f = e == true // 再看看这个呢
	// 因e为false,则e == true结果为假,所以f=false,相当于f被修改为假
	fmt.Printf("e = %v, f = %v\n", e, f) // e = false, f = false

	// !=也一样
	e = f != true
	// 因f为false,则f != true为真,得e=true
	fmt.Printf("e = %v, f = %v\n", e, f) // e = true, f = false

	g := false
	e = f != true == g // 这个又怎么玩?
	// 因f为false,则f != true为真,真 == g为false,则e=false
	fmt.Printf("e = %v, f = %v, g = %v\n", e, f, g)

自己先过一遍,看看结果对不对?speed running:

(a+c)*b = 8
(a+a)*b/4 = 4
a+5*b/2*2 = 41
a+b/2*4 = 17
d = <nil>, type=*int
&c = 0xc0000180b0, &d = 0xc000006028
a = 2
a = 3
&a=0xc000018098, d=0xc000018098, *d = 3
e = false, f = true
e = false, f = false
e = true, f = false
e = false, f = false, g = false

哈哈,觉得好玩是因为有一双发现和制造好玩的手,在较短时间内可以实现书本上好几页、好几处的东西哦!


http://lihuaxi.xjx100.cn/news/1075538.html

相关文章

html学习第1篇---基础

html学习---基础简介 1、什么是网页2、什么是HTML3、常用浏览器以及内核4、Web标准4.1、为什么需要Web标准4.2、Web标准的构成 5、HTML语法规范5.1、基本语法概述5.2、标签关系 6、html基本结构标签 1、什么是网页 网站是指在因特网上根据一定的规则&#xff0c;使用HTML等制作…

SQL Server flush故障

SQL Server flush故障通常指数据库中的数据无法正确地写入磁盘。这可能是由于磁盘故障、存储空间不足、IO错误、操作系统问题等原因引起的。 1. 检查磁盘空间是否足够&#xff1a; SELECT DISTINCT drive, CONVERT(DECIMAL(18,2),ROUND(AVG(free_mb),2)) AS free_mb FROM sys…

stm32读写内部Flash

stm32内部flash地址架构映射 因为我的stm32f407的内部flash是1M的所以块2不存在&#xff0c;但他的地址仍然存在&#xff0c;只是没有作用&#xff0c;这是stm32的整体框架。 主存储器 一般我们说 STM32 内部 FLASH 的时候&#xff0c;都是指这个主存储器区域&#xff0c;它…

【正则表达式上】——03全栈开发——如桃花来

目录索引 介绍&#xff1a;常见匹配模式&#xff1a; re.match()方法&#xff1a;常规匹配&#xff1a;泛匹配&#xff1a; 匹配目标-匹配分组&#xff1a;贪婪匹配&#xff1a;非贪婪匹配&#xff1a; 介绍&#xff1a; 正则表达式是对字符串操作的一种逻辑公式&#xff0c;就…

简单聊聊目标检测新范式RT-DETR的骨干:HGNetv2

【前言】 本文版权属于GiantPandaCV&#xff0c;未经许可&#xff0c;请勿转账&#xff01; 前几天疯狂刷屏的RT-DETR赚足了眼球&#xff0c;在精度和速度上体现的优势和性价比远远高于YOLO&#xff0c;而今年ChatGPT、Sam的出现&#xff0c;也让一些吃瓜群众知乎CNN没有未来了…

Ferry开源工单系统搭建与使用案例

文章目录 部署数据库部署Ferry部署拉取代码修改配置创建needinit空文件启动容器备份缓存数据重新部署使用案例配置用户后台管理流程分类模板管理流程管理创建工单创建工单创建工单催办失败解决审批工单处理工单完成处理部署

三维动画渲染用什么软件好?

三维渲染是通过计算机应用程序把 3D 模型生成图像&#xff08;照片级真实感或非照片级真实感&#xff09;的自动化过程&#xff0c;三维动画渲染是动画制作过程的最后一步&#xff0c;该过程将各种视觉效果应用于最终模型&#xff0c;例如阴影、纹理、灯光反射和运动模糊等&…

ChatGPT如何写作-ChatGPT写作程序

ChatGPT如何写作 ChatGPT是一款自然语言处理模型&#xff0c;它无法像人类一样进行“写作”。但是&#xff0c;您可以利用ChatGPT的生成文本功能来帮助您生成文字。以下是一些使用ChatGPT写作的建议&#xff1a; 确定主题和目标受众。在开始写作之前&#xff0c;请确保您清楚知…