GO语言入门-运算符

GO语言入门-运算符

目录

GO语言入门-运算符

概述:

分类:

算数运算符

关系运算符号

逻辑运算符

位运算符

赋值运算符

优先级

自增自减



概述:

go语言内置的运算符号可以分为算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符。全部的运算符如下:

全部运算符号及分隔符列表(来自《go语言学习笔记》)
+ & += &= && == != ( )
- | -= |= || < <= [ ]
* ^ *= ^= <- > >= { }
/ << /= <<= ++ = := , ;
% >> %= >= -- ! ... . :
  &^   &^=          

实际上 ++ -- 不算再运算符中。

没有乘幂和绝对值运算符号,对应标准库math中的Pow Abs函数。

分类:

算数运算符

算数运算符号
运算符 描述
+

-

*
/
% 取余

 

关系运算符号

关系运算符号
运算符 描述
== 判断运算符左值和右值是否相等,相等返回true否则false
!=

判断运算符左值和右值是否不相等,不相等返回true否则false

>

判断运算符左值是否大于右值,大于返回true否则false

< 判断运算符左值是否小于右值,小于返回true否则false
>= 判断运算符左值是否大于等于右值,大于返回true否则false
<= 判断运算符左值是否小于等于右值,小于返回true否则false

 

逻辑运算符

逻辑运算符号
运算符 描述
&& 逻辑与,左值与右值均为true则返回ture,否则false
||

逻辑或,左值与右值只要存在一个true则返回true,否则false

! 逻辑非,单目运算,操作数为true时则为false,否则false

位运算符

位运算符号
运算符 描述
& 按位与,两位均为1则为1否则0
| 按位或,两位至少有1则为1否则0
^ 当为单目运算符时,按位取反。1取反后为0,0异或后取反为1
^ 当为双目运算符时,按位异或,两个bit位不同时为1,也就是只能存在一个1或者只能存在一个0.
&^ 按位清零,都为1是为0.
<< 位左移,左移n位就是乘2的n次方
>> 位右移,右移n为就是除2的n次方

 

其中&^主要用于清除位图bit为1的场景。达到一次把多个bit位(该bit位为1)的bit位置置为0.

赋值运算符

运算符 描述
= 赋值运算符号,右值赋值给左值
+= 左右值相加后赋值给左值
-= 左右值相减后赋值给左值
*= 左右值相乘后赋值给左值
/= 左右值相除后赋值给左值
%= 左右值取余后把余数赋值赋值给左值
<<= 左右值按位左移后赋值给左值
>>= 左右值按位右移后赋值给左值
&= 左右值按位与后赋值给左值
|= 左右值按位或后赋值给左值
^= 左右值按位异或后赋值给左值
&^= 左值被右值按位清零后赋值给左值

按位清零测试代码如下:

	var a = 0b1111
	var c = 0b0110
	fmt.Printf("左值 %b\n", a)
	fmt.Printf("右值 %b\n", c)
	a &^= c
	fmt.Printf("按位清除后 %b\n", a)
	/**output
	左值 1111
	右值 110
	按位清除后 1001
	 */

从上面可以看出1111高位是1但是0110高位是0,则高位还是1,1111中间两位为1,0110中间两位为1,因此1111的中间两位1被清零为00,最后结果值为:1001. 

优先级

一元运算符有哦先机最高,二元则分为5个等级。从高道低分别为:

二元运算符优先级
优先级 运算符 说明
highest * / % << >>& &^  
  + - | ^  
  ==  != < <= > >=  
  &&  
lowest ||  

 

自增自减

自增、自减(++ --)在go语言中不是运算符号, 因此不能用于表达式,只能单独存在。并且不能前置,只能放到变量后面。

	f := 1
	//syntax error: unexpected ++, expecting } 不能前置++或者--
	//++f
	f++
	//2 ++只能单独成行
	fmt.Println(f)
	//syntax error: unexpected ++, expecting }
	//++ --是表达式所以报错
	//if (f++) > 0 {
	//}
	addr := &f
	//单目运算符*优先级高,因此(*addr)++是对addr指向的内存值进行自增
	*addr++
	//还是不能当表达式
	//fmt.Println(*addr++)
	fmt.Println(*addr) //3
	/**
	output:
	2
	3
	 */

注意:++ --不能前置 也不能当做表达式。

你可能感兴趣的:(GO语言,运算符)