Go语言之运算符

Golang 运算符主要有算术运算符、赋值运算符、比较运算符/关系运算符、逻辑运算符、位运算符和指针运算符

一、算术运算符

算术运算符是对 数值类型 的变量进行运算的,比如:加、减、乘、除和取模

运算符说明示例结果
+正号+33
负号-1-1
+加法运算2+57
减法运算9-54
*乘法运算8*324
/除法运算10/33
%取模运算10%31
++自增运算a = 5; a++6
自减运算(两个-)a = 8; a–7
+字符串拼接“hello” + “world”“helloworld”

注:除法运算 /,如果是整数之间做除法运算时,只保留整数部分而舍弃小数部分,Golang 中的自增运算和自减运算只能当做一个独立语句使用,Golang 中只支持后自增和后自减

1、下面例子通过算数运算符进行计算,如图:

运行结果如下:

二、赋值运算符

赋值运算符是对已存在的 变量 进行重新设置新值的运算符

十进制运算:

运算符说明示例结果
=将一个表达式的值赋给另一个a=a+ba=a+b
+=相加后再赋值a+=ba=a+b
-=相减后再赋值a-=ba=a-b
*=相乘后再赋值a*=ba=a*b
/=求余后再赋值a/=ba=a/b
%=相除后再赋值a%=ba=a%b

二进制运算符:

运算符说明示例结果
<<=左移后赋值a<<=ba=a<<b
>>=右移后赋值a>>=ba=a>>b
&=按位与后赋值a&=ba=a&b
^=按位异或后赋值a^=ba=a^b
|=按位或后赋值a |= ba = a | b

1、下面通过十进制运算实现赋值运算符,如图:

运行结果如下:

2、通过左移右移赋值,如图:

运行结果如下:

从上图看出,将a左移两位后赋值给a,此时a的值变为40,为什么是40呢?因为a左移1位相当于a*2的1次方,a左移2位就是a * 2的2次方,也就是10 * 2的2次方,10*4=40,同理,b向右移1位相当于b / 2的1次方,右移2位就是b/2的2次方,因此实际结果为b / 2的3次方,b的值为5,就是5/2的3次方=5/8结果为0

注:2的-1次方结果为1/2、2的-2次方结果为1/4、2的-3次方结果为1/8,以此类推

3、通过按位与、异或、或实现赋值:

(1) a&=5的值为什么是4?

按位与是将十进制数转换为二进制数之后进行按位操作,30的十进制数是11110,5的十进制数为00101,&的运算法则是:两个操作数的二进制表示,只有对应位置都是1,结果才是1,否则为0,因此11110和00101进行&后的内容为00100,结果为4

(2) b^=4 的值为什么是24?

按位异或也需要将十进制转为二进制后进行操作,运算法则是:当两个操作数的二进制表示相同(同为0或者同为1) 时,结果为0,否则为1,28的二进制数为11100,4的二进制为00100,根据运算法则,进行按位异或后的值二进制为11000,转换为十进制就是24

(3) c |=3 的值为什么是15?

按位或也需要将十进制转为二进制后进行操作,运算法则是:两个操作数的二进制表示,只有对应位置都是0,结果才是0,否则位置1,15的二进制为1111,3的二进制为0011,因此按位或后的结果为1111,转换为十进制就是15

三、比较运算符

比较运算符(关系运算符)的结果都是 bool 型,也就是要么是 true,要么是 false。关系表达式经常用在 if 结构的条件中或 循环结构 的条件中

运算符说明示例结果
==相等3 == 3true
!=不等于2 != 2false
<小于2 < 5false
>大于3 > 1true
<=小于等于3 <= 8true
>=大于等于5 >= 6false

1、下面例子表示利用比较运算符进行计算,如图:

在golang中,可以直接将float64和int进行比较,golang内部会自行转换类型

2、下面例子从键盘获取一个整数或者浮点数,并与50进行比较,如图:

说明:从键盘输入后,读取的内容实际是字符串类型,因此在去除\n后,还需要将此字符串类型转换为float64类型,然后在与50进行比较,运行程序,分别输入三个数,结果如图:

注意看:输入25.890后,实际输出只有25.89,因为在golang中,如果浮点数最后一个为0,并且该位之后没有非零数字,那么可以被省略这是由于 IEEE 754 浮点数标准的舍入规则所决定的

3、也可以使用==来比较字符串,如图:

四、逻辑运算符

逻辑运算符是用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 bool 值

运算符说明示例
&&逻辑与a && b
||逻辑或a || b
逻辑非!a
  • 逻辑与:如果 a 和 b 的值都为真,那么结果为真,否则结果为假。如果 a 的值为假,那么不会计算 b 的值
  • 逻辑或:只要 a和 b的值一个为真,那么结果为真,否则结果为假。如果 a 的值为真,那么不会计算 b的值
  • 逻辑非:如果原来 a的值为真,那么结果为假。如果原来 a 的值为假,那么结果为真

1、下面例子表示逻辑运算符进行计算,如图:

运算结果如下:

2、如果同一个变量要判断多次,可以通过括号连接,如图:

上图中我们判断变量a,并且要同时满足变量a和变量b,变量b又要同时满足两个条件,此时可用括号将变量a与b进行连接,运行结果如下:

五、位运算符

上面中的模块已经讲解过了,主要就是&、|、^、<<、>>等

六、指针运算符

指针运算符主要包括取地址运算符 & 和 取值运算符 *

运算符说明示例
&返回变量的内存地址&a
*获取指针变量对应的值*a

下面例子表示使用指针运算进行计算,如图:

七、运算符优先级

运算符的运算规则是,优先级高的运算符先执行,优先级低的运算符后执行,同一优先级的运算符按照从左到右的顺序进行,Go 语言中大部分运算符都是从左向右执行的,只有单目运算符、赋值运算符它们是从右向左执行的

Go 语言运算符中,如果有小括号,即 (),则小括号的优先级最高

优先级表如下:优先级值越大,优先级越高

优先级分类运算符结合性
1逗号运算符,从左到右
2赋值运算符=、+=、-=、*=、/=、 %=、 >=、 <<=、&=、^=、|=从右到左
3逻辑或||从左到右
4逻辑与&&从左到右
5按位或|从左到右
6按位异或^从左到右
7按位与&从左到右
8相等/不等==、!=从左到右
9关系运算符<、<=、>、>=从左到右
10位移运算符<<、>>从左到右
11加法/减法+、-从左到右
12乘法/除法/取余*(乘号)、/、%从左到右
13单目运算符!、*(指针)、& 、++、–、+(正号)、-(负号)从右到左
14后缀运算符( )、[ ]、->从左到右

标签