Go语言之运算符
一、运算符的基本分类
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 其它运算符
二、算术运算符
算术运算符是对数值类型变量进行运算的一种运算符。
(一)算术运算符一览表
运算符 | 运算 | 范例 | 结果 |
+ | 正号 | +8 | 8 |
- | 负号 | -8 | -8 |
+ | 加 | 8+9 | 17 |
- | 减 | 8-2 | 6 |
* | 乘 | 8 * 2 | 16 |
/ | 除 | 8 / 2 | 4 |
% | 取模 | 8 % 3 | 2 |
++ | 自增 | x = 3 x++ | 4 |
-- | 自减 | x = 3 x-- | 2 |
+ | 字符串相加 | “x” + "y" | "xy" |
(二)案例演示
package main import "fmt" func main() { // + - * / % ++ --案例 var a int = 12 var b int = 7 fmt.Println(a + b) // 19 fmt.Println(a - b) // 5 fmt.Println(a * b) // 84 fmt.Println(a / b) // 1 如果需要为浮点数,重新定义a为浮点数12.0 var a float32 = 12.0 fmt.Println(a % b) // 5 a++ fmt.Println(a) // 13 a-- fmt.Println(a) //12 }
(三)注意事项
- 除号“/”,整数除和小数除是有区别的,整数之间的除,只保留整数部分而舍弃小数部分
- 当对一个数取模时,可以等价于a % b = a - a / b * b
- Go中自增自减只能当作一个独立语言使用,不能使用 c = a++,而是只能独立使用为a++
- Go中的++和--只能写在变量的后面,不能写在变量的前面,即只有a++,而没有++a
三、赋值运算符
赋值运算符就是将某个运算后的值,赋值给指定的变量。
(一)赋值运算符一览表
运算符 | 描述 | 实例 |
= | 将一个表达式的值赋值给一个左值 | c=a+b,将a+b的值赋值给c |
+= | 相加后再赋值 | c+=a等于c=c+a |
-= | 相减后再赋值 | c-=a等于c=c-a |
*= | 相乘后再赋值 | c*=a等于c=c*a |
/= | 相除后再赋值 | c/=a等于c=c/a |
%= | 求余后再赋值 | c%=a等于c=c%a |
<<= | 左移后赋值 | c<<=2等于c=c<<2 |
>>= | 右移后赋值 | c>>=2等于c=c>>2 |
&= | 按位与后赋值 | c&=2等于c=c&2 |
^= | 按位异或后赋值 | c^=2等于c=c^2 |
|= | 按位或后赋值 | c|=2等于c=c|2 |
(二)案例演示
package main import "fmt" func main() { // 交换a,b两个数的值 a := 2 b := 5 fmt.Printf("交换前a=%v,b=%v",a,b) //交换前a=2,b=5 //定义一个中间变量temp temp := a a = b b = temp fmt.Printf("交换后a=%v,b=%v",a,b) //交换后a=5,b=2 }
- 赋值运算符从右向左进行计算
- 赋值运算符的左边只能时变量,右边可以时变量、表达式、常量值
package main import "fmt" func main() { //交换a,b两个数的值,不允许使用中间变量 a := 2 b := 5 a = a + b b = a - b // b = a + b - b a = a - b // a = a - (a-b) fmt.Printf("交换后a=%v,b=%v",a,b) //交换后a=5,b=2 }
package main import "fmt" func main() { // 求出三个数的最大值 // 先求出两个数的最大值,然后再求出第三个 a := 10 b := 35 c := 25 var max int if a > b { max = a } else { max = b } fmt.Printf("两个数的最大值为%v", max) //35 if c > max { max = c } fmt.Printf("三个数的最大值为%v", max) //35 }
四、关系运算符
关系运算符常用于if结构的条件语句或者循环结构,它的结果都是bool型(true/false)。
(一)关系运算符一览表
运算符 | 运算 | 案列 | 结果 |
== | 相等于 | 5==3 | false |
!= | 不等于 | 5!=3 | true |
< | 小于 | 5<3 | false |
> | 大于 | 5>3 | true |
<= | 小于等于 | 5<=3 | false |
>= | 大于等于 | 5>=3 | true |
(二)案例演示
package main import "fmt" func main() { var a int = 5 var b int = 3 fmt.Println(a==b) //false fmt.Println(a!=b) //true fmt.Println(a<b) //false fmt.Println(a>b) //true fmt.Println(a<=b) //false fmt.Println(a>=b) //true }
五、逻辑运算符
用于连接多个关系表达式,结果也是一个bool类型的值。
(一)逻辑运算符一览表
假设 A的值为true,B的值为false:
运算符 | 说明 | 实例 |
&& | 逻辑与运算符。如果两边都为true结果为true,否则为false. | A&&B 为 false |
|| | 逻辑或运算符。如果两边操作数有一个为true,则为true,否则为false | A||B 为 true |
! | 逻辑非运算符。如果条件为true,则则为false,否则为true | !(A&&B) 为 true |
(二)案例演示
package main import "fmt" func main() { var A bool = true var B bool = false fmt.Println(A&&B) //false fmt.Println(A||B) // true fmt.Println(!(A&&B)) //true }
(三)注意事项
- &&也叫短路与,如果第一个条件为false,则第二个条件不会判断最终结果为false
- ||也叫短路或,如果第一个条件为true,则第二个条件不会判断,最终结果为true
六、位运算符
位运算符涉及到二进制相关内容,其一览表如下:
运算符 | 描述 |
& | 按位与运算符,参与运算的两数各对应的二进制相与。同为1结果为1,否则为0 |
| | 按位或运算符,参与运算的两数各对应的二进制相或。有一个为1结果为1,否则为0 |
^ | 按位异或运算符,参与运算的两数各对应的二进制异或。当二进制不同时,结果为1,否则为0 |
<< | 左移运算符,把“<<”左边运算数的二进制全部左移若干位,高位丢弃,低位补0。左移n位就是乘以2的n次方 |
>> | 左移运算符,把“>>”左边运算数的二进制全部右移若干位,右移n位就是除以2的n次方 |
七、其它运算符
(一)指针相关
运算符 | 描述 | 实例 |
& | 返回变量存储地址 | &a,获取变量的实际地址 |
* | 指针变量 | *a,是一个指针变量 |
(二)三元运算符
Go语言中不支持三元运算符,如果想达到三元运算符的效果就需要使用条件语句来进行实现。
if <condition> { //... } else { //... }
八、运算符的优先级
分类 | 描述 | 关联性 | 优先级 |
后缀 | () [] ++ -- | 从左向右 | 高 |
单目 | + - ! ~ (type) * & sizeof | 从右向左 | ........ |
乘法 | * / % | 从左向右 | |
加法 | + - | 从左向右 | |
移位 | << >> | 从左向右 | |
关系 | < <= > >= | 从左向右 | |
相等 | == != | 从左向右 | |
按位与 | & | 从左向右 | |
按位异或 | ^ | 从左向右 | |
按位或 | | | 从左向右 | |
逻辑与 | && | 从左向右 | |
逻辑或 | || | 从左向右 | |
赋值运算符 | = += -= *= /= %= >>= <<= &= ^= |= | 从右向左 | |
逗号 | , | 从左向右 | 低 |
- 上表中,优先级依次递减
- 只有单目运算符、赋值运算符是从右向左进行运算的
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。