Go语言中的运算符
## 1 概述
Go语言提供了,算术,关系,逻辑,位,指针,赋值运算符。本篇整体说明一下。
## 2 算术运算
* \+ 相加
* \- 相减
* \* 相乘
* / 相除
* % 求余
* ++ 自增
* \-\- 自减
几个细节,需要留意一下。
* 整数与浮点数进行运算,会将整数转化为浮点数,再运算。
* 两个整数相除,结果是整数,取整数部分。5/3 结果会是 1。
* 求余,如果被除数或除数存在负数,那么余数与被除数保持一致。此处是求余不是取模。
* ++/--,不区分前后,只有变量后的语法,就是 v++。同时++/--构成语句而不是表达式,意味着不能直接赋值。
## 3 字符串连接运算 +
+运算符,也可以完成字符串的连接运算。
```
"Hello" + " " + "Hank!"
```
## 4 关系运算
* == 检查两个值是否相等
* != 检查两个值是否不相等
* \> 检查左边值是否大于右边值
* < 检查左边值是否小于右边值
* \>= 检查左边值是否大于等于右边值
* <= 检查左边值是否小于等于右边值
关系运算时用于判断两个运算数的关系是否成立。返回布尔值。
## 5 逻辑运算
* && 逻辑与,参与运算的两个关系必须同时成立,结果为true,否则为false
* || 逻辑或,参与运算的两个关系成立一个(或都成立)结果为true,全部关系为false,结果为false。
* ! 逻辑非,用于取反某个关系。非真既假,非假既真。只有一个运算数参与运算
用来判断多个关系是否成立。运算结果为:
&&
true && true = true
true && false = false
false && true = false
false && false = false
||
true || true = true
true || false = true
false || true = true
false || false = false
!
!true = false
!false = true
## 6 指针运算
* & 取得变量的内存地址。pv := &v
* \* 获取指针地址对应的值。\*pv
示例为:
```
  v:=42
  pv:=&v
  fmt.Printf("%T(%v)", pv, pv)// *int 0xc000048b68,*int就是指针类型 值为一个类似规则的地址,就是一个号码,标识内存的一个空间区域
  fmt.Println(*pv)// 42,通过地址获取对应的变量值
  *pv ++ // 通过地址更改对应变量
  fmt.Println(*pv, v)// 42 42变量和指针操作的同一变量(内存地址)。
```
Go语言的指针不可以操作。不能执行偏移这类的操作.
理解指针的几个概念:
变量:标识符与值(内存中存储空间)引用。
地址:内存中存储空间的位置(门牌号)
指针:一种类型,其值为某个地址。
一个数据(变量),我们可以通过变量标识符找到他。也可以将他的地址记录下来,通过这个地址找到他。能够记录地址的数据类型就是指针。指针通过&运算符来获取变量的地址。
## 7 位运算
* & 按位与运算
* | 按位或运算
* ^ 按位异或运算
* <<  左移运算符,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。左移n位就是乘以2的n次方。
* \>>  右移运算符,">>"右边的数指定移动的位数,低位舍弃,高位补0。右移n位就是除以2的n次方。
用于运算构成整数的每个二进制位,就是位上0,1的运算。
## 8 赋值运算
* = 简单的赋值运算符,将一个表达式的值赋给一个左值
* +=  相加后再赋值
* -=  相减后再赋值
* \*=  相乘后再赋值
* /=  相除后再赋值
* %=  求余后再赋值
* <<= 左移后赋值
* \>>= 右移后赋值
* &=  按位与后赋值
* ^=  按位异或后赋值
* |=  按位或后赋值
变量 = 表达式
=左边的变量,称之为左值。通常只能是变量。
=右边的表达式,称之为右值。表达式是右值。
自赋值运算,一些运算符,可以与赋值运算符结合,完成快捷自运算赋值,就是上面的+=....|=,逻辑是:
v += 1 相当于 v = v + 1
其他的逻辑相同!
## 9 运算符优先级
由高到低,列表如下:
* ^ !
* \* / % << >> & &^
* \+ - | ^
* == != < <= >= >
* <-
* &&
* ||
建议使用()小括号,明确调整优先级。
## 10 类型转换
类型不同的数据不能完成运算。如果需要,则要将类型转换为一致的类型。
自动转换,有些转换Go语言自动完成,例如 `5/4.0` 5整型会被自动转换为浮点数。
强制转换,使用语法 `type(数据)` 的形式转换,例如:`float64(5)`。
Go语言对类型要求比较严格,类型可以相互转换的场景不多,主要集中在数值上。就是要类型兼容,才可以转换。
完!
原文出自:[小韩说课](http://www.hellokang.net/go/go-operator/)
微信关注:小韩说课

Go语言中的运算符的更多相关文章
- c语言中逗号运算符和逗号表达式
		
原文:c语言中逗号运算符和逗号表达式 C语言提供一种特殊的运算符——逗号运算符.用它将两个表达式连接起来.如: 3+5,6+8称为逗号表达式,又称为“顺序求值运算符”.逗号表达式的一般形式为 表达式1 ...
 - C语言中的运算符
		
1. 在C语言中运算符包括:算术运算符.关系运算符.赋值运算符.逻辑运算符 2.用运算符把变量.常量连接起来的式子就是表达式 3.我们阅读一个表达式,从表达式的功能和表达式的值来看 4. 算术运算符和 ...
 - C语言中关于运算符优先级别
		
在一一个表达式中可能有多个不同的运算符结合起来,由于运算符的优先级别不一样,可能会形成得到的结果不同. 优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级. 对于相同的优先级, ...
 - go语言中的运算符^,&
		
一.^运算符 1.作为二元运算符 ^作二元运算符就是异或,包括符号位在内,相同为0,不相同为1 规则:1^1 =0, 0^0=0,1^0=1,0^1=1 事例: (1)0001 0100 ^ 0000 ...
 - python语言中的运算符
		
基本运算符 1.比较运算符 # >,< ,>= ,<=, ==(比较值) ,!=(不等号) 2.逻辑运算符 and or not(取反) 3.算术运算 / ...
 - C语言中位运算符异或“∧”的作用
		
异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧=,∧=,∧=.如: 即071∧,结果为023(八进制数). “异或”的意思是判断两个相应 ...
 - JAVA语言中的运算符和表达式
		
JAVA——运算符 按运算符要求的运算符个数可分为一元.二元.三元运算符: 一元运算符有一个操作数:如正数或者负数前面的“+”.“—”,和自增“++”.自减“- -”. 二元运算符有两个操作数:如除法 ...
 - go语言中运算符
		
Go语言学习笔记(运算符)-day01 go语言中与其他语言一样,存在多种运算符,下表列出了go语言中的运算符类型 算数运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算数运算符 运算符 描述 ...
 - c语言 &取地址运算符的理解
		
对于c语言中的&运算符,百度百科是这样定义的:(&p)则是这样一种运算,返回当时声明p 时开辟的地址:但是根据我对代码的观察,我觉得&运算符不只是返回地址的功能: 例如: in ...
 
随机推荐
- C/C++ 合法整数与字符
			
一.C语言中的合法整型 首先C语言中的整型有三种表示方式:十进制.八进制和十六进制.(C语言中没有表示二进制的整型) 十进制: 如 int a = 63; //一个正常的整型 八进制: 如果想用8进制 ...
 - 【深入理解JAVA虚拟机】第一部分.走进Java
			
Java技术体系 如果仅从传统意义上来看,Sun官方所定义的Java技术体系包括以下几个组成部分:Java程序设计语言各种硬件平台上的Java虚拟机Class文件格式Java API类库来自商业机构和 ...
 - hdu 6169 gems gems gems【DP】
			
题目链接:hdu 6169 gems gems gems Now there are n gems, each of which has its own value. Alice and Bob pl ...
 - BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】
			
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec Memory ...
 - Windows 2008 Scheduled tasks result codes
			
0 or 0x0: The operation completed successfully. 1 or 0x1: Incorrect function called or unknown funct ...
 - tomcat部署web项目方法
			
一.tomcat部署web项目之静态配置: 方法一:直接将为web项目放到webapps下: 如图所示:在webapps文件下,存放了一个html文件,启动tomcat,访问http://localh ...
 - Module、__init__.py 文件解析
			
一.什么是Module? 一个python Module就是一个模块,本质就是一个.py文件,其中包含了python对象的定义和python语句. 在模块内部,模块名存储在全局变量__name__中, ...
 - POJ 1753 Flip Game (状态压缩 bfs+位运算)
			
Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 square ...
 - 史上最简单的SpringCloud教程 | 第十三篇: 断路器聚合监控(Hystrix Turbine)(Finchley版本)
			
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f13-turbine/ 本文出自方志朋的博客 上一篇文章讲述 ...
 - 四、MapReduce 基础
			
是一个并行计算框架(计算的数据源比较广泛-HDFS.RDBMS.NoSQL),Hadoop的 MR模块充分利用了HDFS中所有数据节点(datanode)所在机器的内存.CUP以及少量磁盘完成对大数据 ...