GO语言入门-运算符

本文介绍了GO语言的运算符,包括算数、关系、逻辑、位运算符和赋值运算符,重点讲解了位运算符中的按位清零操作,并阐述了运算符的优先级规则。特别指出,GO语言中的自增、自减运算符只能后置且不能用于表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
	 */

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值