Golang 内置的运算符
算术运算符
关系运算符
逻辑运算符
位运算符(不常用)
赋值运算符
算数运算符
运算符 | 描述 |
---|---|
+ | 相加 |
- | 相减 |
* | 相乘 |
/ | 相除 |
% | 求余 |
a := 10
b := 9
fmt.Printf("a+b的值为%v\na-b的值为%v\na*b的值为%v\n",a+b,a-b,a*b)
除法注意:如果运算的数都是整数,那么除后,去掉小数部分,保留整数部分
a := 15
b := 5
fmt.Println(a / b)
var c float32 = 9.9
d := 3
fmt.Println(c / float32(d))
var c0 = 9.9
d0 := 3.0
fmt.Println(c0 / d0)
取余注意 余数=被除数-(被除数/除数)*除数
var a = 10
var b = 3
fmt.Println(a % b) //1
fmt.Println(-10 % 3) // - 10 - (-10/3)*3 =-1
fmt.Println(10 % -3) // 10-(10/-3)*-3=1
注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。
且在 golang 中没有前++,为 错误写法
var i int = 8
var a int
a = i++ //错误,i++只能独立使用
a = i-- //错误, i--只能独立使用
fmt.Ptintln(a)
var a = 12
++a //错误写法
fmt.Println(a)
正确的写法
var a = 1
a++
a--
fmt.Println(a)
关系运算符
运算符 | 描述 |
---|---|
== | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |
!= | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |
> | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 |
>= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |
< | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |
<= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |
a := 10
b := 12
fmt.Println(a == b)
fmt.Println(a != b)
fmt.Println(a > b)
fmt.Println(a < b)
fmt.Println(a >= b)
fmt.Println(a <= b)
var a1 = 9
var a2 = 14
flag := a1 > a2
if flag {
fmt.Println("a1>a2")
}else{
fmt.Println("返回为空")
}
a0 := 11
b0 :=20
flog := a0 < b0
if flog {
fmt.Println("a0<b0")
}else{
fmt.Println("a0 > b0")
}
逻辑运算符
运算符 | 描述 |
---|---|
&& | 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。 |
ll | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。 |
! | 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。 |
逻辑 AND 运算符
var a = 18
var b = 8
fmt.Println(a > 10 && b < 10)
fmt.Println(a > 24 && b < 10)
fmt.Println(a > 5 && b < 6)
fmt.Println(a == 5 && b < 6)
逻辑 OR 运算符
var a = 23
var b = 8
fmt.Println(a > 10 || b < 10)
fmt.Println(a > 24 || b < 10)
fmt.Println(a > 5 || b < 6)
fmt.Println(a == 5 || b < 6)
逻辑 NOT 运算符
flag := false
fmt.Println(!flag)
逻辑与和逻辑或短路
逻辑与:前面是false后面就不会执行
//定义一个方法
func test() bool {
fmt.Println("方法执行了呢")
return true
}
var a = 10
if a > 9 && test() {
fmt.Println("执行")
}
var a = 10
if a > 11 && test() {
fmt.Println("执行")
}else{
fmt.Println("比错了奥,有问题了")
}
逻辑或:前面是true后面就不会执行
var a = 10
if a > 11 || test() {
fmt.Println("执行")
}
var a = 10
if a < 11 || test() {
fmt.Println("执行")
}
赋值运算符
运算符 | 描述 |
---|---|
= | 简单的赋值运算符,将一个表达式的值赋给一个左值 |
+= | 相加后再赋值 |
-= | 相减后再赋值 |
*= | 相乘后再赋值 |
/= | 相除后再赋值 |
%= | 求余后再赋值 |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
l= | 按位或后赋值 |
^= | 按位异或后赋值 |
package main
import "fmt"
func main(){
var num1 int = 10
fmt.Println(num1)
var num2 int = (10 + 20) % 3 + 3 - 7 //=右侧的值运算清楚后,再赋值给=的左侧
fmt.Println(num2)
var num3 int = 10
num3 += 20 //等价num3 = num3 + 20;
fmt.Println(num3)
}
var a = 20
a = 21
fmt.Println(a)
// var a = 23 + 2
// fmt.Println(a)
// var a = 10
// b := a
// fmt.Println(b)
// var a = 10
// b := a + 2
// fmt.Println(b)
// var a = 10
// a += 3 // 等价于a=a+3
// fmt.Println(a)
// var a = 10
// a = a + 3
// fmt.Println(a)
// var a = 10
// a -= 3 //a=a-3
// fmt.Println(a)
// var a = 10
// a *= 3 //a=a*3
// fmt.Println(a)
// var a = 10
// a /= 3 // a=a/3
// fmt.Println(a) //结果:3
// var a float64 = 10
// a /= 3 // a=a/3
// fmt.Println(a) //结果:3.3333333333333335
// var a = 10
// a %= 3 // a=a%3
// fmt.Println(a) //1
位运算符(了解即可;涉及二进制间转换)
位运算符对整数在内存中的二进制位进行操作。
运算符 | 描述 |
---|---|
& | 参与运算的两数各对应的二进位相与。(两位均为1才为1) |
l | 参与运算的两数各对应的二进位相或。(两位有一个为1就为1) |
^ | 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(两位不一样则为1) |
<< | 左移n位就是乘以2的n次方。“a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。 |
>> | 右移n位就是除以2的n次方。“a>>b”是把a的各二进位全部右移b位。 |
var a = 5 // 101
var b = 2 // 010
fmt.Println("a&b=", a&b) // 000 值0
fmt.Println("a|b=", a|b) // 111 值7
fmt.Println("a^b=", a^b) // 111 值7
fmt.Println("a<<b=", a<<b) // 10100 值20 5*2的2次方
fmt.Println("a>>b=", a>>b) // 值1 5/2的2次方
位运算符是十转二进制后,竖着相对比
最后输出的值为二进制还需要转为十进制输出