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

【go入门】运算符

目录

  • 前言
  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 取地址和指针运算符
  • 运算符优先级

前言

go语言和其他语言的运算符一样,大体上分为这么几种,算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、取地址和指针运算符。最后也会说一下它们的优先级。

算术运算符

运算符描述
+相加
-相减
*相乘
/相除
%取余
++自增
自减
//demo1
package main

import "fmt"

func main() {
	a, b := 20, 10
	var c int

	c = a + b
	fmt.Printf("a + b = %d\n", c)
	c = a - b
	fmt.Printf("a - b = %d\n", c)
	c = a * b
	fmt.Printf("a * b = %d\n", c)
	c = a / b
	fmt.Printf("a / b = %d\n", c)
	c = a % b
	fmt.Printf("取余 = %d\n", c)
	a++
	fmt.Printf("自增 = %d\n", a)
	a--
	fmt.Printf("自减 = %d\n", a)
}

输出结果是:

a + b = 30
a - b = 10
a * b = 200
a / b = 2
取余 = 0
自增 = 21
自减 = 20

关系运算符

运算符描述
==相等返回true不相等返回false
!=不相等返回true否则返回false
>左边值大于右边值返回true否则返回false
<左边值小于右边值返回true否则返回false
>=左边值大于等于右边值返回true否则返回false
<左边值小于等于右边值返回true否则返回false

逻辑运算符

运算符描述
&&逻辑与(AND),两边都为真为true否则false
||逻辑或(OR),两边都为假为true否则false
!逻辑非(NOT),若A为真,则非A为假
//demo2
package main

import "fmt"

func main() {
	a := true
	b := false
	fmt.Println(a && b)
	fmt.Println(a || b)
	fmt.Println(!a)
}

输出结果是:

false
true
false

位运算符

位运算符是对内存中的二进制进行运算

运算符描述
&按位与,对两边的操作数按位与,相同为1不同为0
|按位或,对两边的操作数按位或,都为0才为0,只要有一个1则为1
^按位异或,对两边的操作数按位异或,相同为0不同为1
<<左移,左移n位就是乘以2的n次方
>>右移,右移n位就是除以2的n次方

可以看一下上一篇讲常量文章末尾的思考题。

赋值运算符

= 将表达式的值赋给左值(将右边的值赋给左边)
+= 将左右相加赋给左边
-=  *= /= %= <<= >>= &= ^= |=

取地址和指针运算符

go语言和C语言一样也有指针和地址的概念

运算符描述
&返回变量存储地址,&a
*指针变量,地址当中的内容,*a
//demo3
package main

import "fmt"

func main() {
	var a int = 1
	var p *int

	p = &a //p中存的是a的地址
	fmt.Println(p) //输出的是a的地址
	fmt.Println(*p) //*p是通过a的地址找到a的内容
}

输出结果是:

0xc00000a0e8
1

当然你的地址和我的地址可能不一样,这个是随机的,就和你去酒店开房,给你分配的房间号是随机的,只要空着,都可能会分配给你。内存相当于酒店,地址相当于房间号。

运算符优先级

运算符分优先级也就是说有些运算符先算有些后算,当同一优先级的运算符一起出现,从左往右算。

第一优先级 * / % << >> & &^
第二优先级 + - | ^
第三优先级 == != > < >= <=
第四优先级 &&
第五优先级 ||

可以通过小括号提升某个表达式的整体优先级

package main

import "fmt"

func main() {
	a, b, c, d := 20, 10, 15, 5
	var e int

	e = (a + b) * c / d
	fmt.Println(e)
	e = a + (b*c)/d
	fmt.Println(e)
	e = (a + b) * (c / d)
	fmt.Println(e)
	e = ((a + b) * c) / d
	fmt.Println(e)
}

输出结果是:

90
50
90
90

http://www.kler.cn/news/334511.html

相关文章:

  • 【Java并发编程的艺术3】Java内存模型(上)
  • Redis: 集群高可用之MOVED转向和ASK转向解决方案
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-01
  • LeetCode讲解篇之98. 验证二叉搜索树
  • PCIe6.0 AIC金手指和板端CEM连接器信号完整性设计规范
  • Nexus制品库搭建(maven)
  • 汇编语言笔记2
  • java数据类型转换和注释
  • esp8266 at指令链接wifi时一直connect disconnest
  • 信号用wire类型还是reg类型定义
  • 2024年,现在做全职的AI产品经理,时机对不对?
  • VMware ESXi更改https的TLS协议版本
  • 植物叶片病害检测数据集 5100张 29类 带标注 voc yolo
  • 利用 Python 爬虫采集 1688商品详情
  • 【D3.js in Action 3 精译_028】3.4 小节 DIY 实战:使用 Observable 在线绘制 D3 条形图
  • 问:TCP长连接vs短连接有哪些差异?
  • Unity MVC框架演示 1-1 理论分析
  • VSCode python代码颜色调整与pycharm对齐
  • 项目-坦克大战笔记-墙体销毁以及人机销毁
  • vue-live2d看板娘集成方案设计使用教程