go语言里面的运算符号包含了算术运算符,逻辑运算符,和位运算符。
算术运算符
程序中+号的使用
1)当左右两边都是数值型时,则做加法运算
2)当左右两边都是字符串,则做字符串拼接
var i = "1"
var j = "2"
sum := i + j
fmt.Println(sum)
12
⽐较运算符
对于某些特殊类型的是否可以比较,比如切片。
在其他语言里面,数组是引用类型,不是一个值类型,用==号在比较的时候是比较两个数组的引用,而不是比较里面的值是否相同。这一点在go语言里面是不一样的,如果两个数组的维数相同是可以比较的。
⽤ == ⽐较数组
- 相同维数且含有相同个数元素的数组才可以⽐较(如果长度不一样数组比较就会出现编译错误)
- 每个元素都相同的才相等
var array1 = [5]int{1,2,3,4,6}
var array2 = [5]int{1,2,3,4,6}
println(array1 == array2)
true
逻辑运算符
位运算符
按位清0运算符
与其他主要编程语⾔的差异
&^ 按位置零
1 &^ 0 -- 1
1 &^ 1 -- 0
0 &^ 1 -- 0
0 &^ 0 -- 0
对于左右两个操作数来说,只要右边的操作数为1,那么无论左边的位上的数字为0还是为1,那么结果都为0。
如果右边的二进制位为0,那么左边的二进制原来为什么,其结果就是什么。
const(
Readable = 1 << iota // 1
Writeable // 10
Executable // 100
)
func main() {
fmt.Println(Readable,Writeable,Executable)
a := 7 //0111
fmt.Println(a&Readable == Readable,a&Writeable == Writeable,a&Executable == Executable)
}
1 2 4
true true true
现在适应按位清0运算符。
const(
Readable = 1 << iota // 1
Writeable // 10
Executable // 100
)
func main() {
fmt.Println(Readable,Writeable,Executable)
a := 7 //0111
a = a&^ Readable
fmt.Println(a) //110
fmt.Println(a&Readable == Readable,a&Writeable == Writeable,a&Executable == Executable)
}
1 2 4
6
false true true
可以看到对于其他的不受影响,这样代码易读和简洁明了。