本记录只记录两条
一、数组相同的判断
我们在用别的语言的时候,数组其实属于应用数据类型,所以做判断只对数组的引用做判断,而在 go 中,数组是以数据的方式进行相同判断的。
那么决定两个数组是否相同的条件是
数组的维度和各个维度的数量相同
每个对应元素相同
说到底,其实就是判断数组中的各个元素都相同才行
那么看例子吧
package test_compare_array
import(
"fmt"
"testing"
)
func TestCompareArray(t *testing.T){
a:=[...]int{1,2,3,4}
b:=[...]int{1,3,2,4}
c:=[...]int{1,2,3,4,5}
d:=[...]string{"1","2","3","4"}
fmt.Println(a==b)
fmt.Println(a==c)
fmt.Println(a==d)
}
当数组长度和变量类型不同时,直接编译报错
在注释掉这些报错信息之后
显而易见这个例子,就当是先认识一下数组的一种初始化方式吧。
二、一个可能不太熟悉的运算符 &^(按位清零运算符)
先说下这个运算符的意思
顾名思义,按位
就是根据位上面的数字,进行运算,打个比方
0001 &^ 0001
就是每位进行与运算,如果右边的位
上的数字是0,那么则保留左边原有的数字,如果右边的位是1
,那么无论如何,得到的都是0
那么
0001&^0001=0000
再来举个例子
0100&^0001=0100
再来一个
1111&^0001=1110
明白了吧?
其实可以理解成 0 是一个没有意义的东西,左边的保持原值
而 1的破坏性很强,只要右边为 1 ,那么左边都会变成 0
我们来套一个例子,顺便回顾下常量的自动赋值
package test_bit_calc
import(
"fmt"
"testing"
)
const{
Readable := 1<<iota
Writable
Excutable
}
func TestBitCalc(t *testing.T){
a:=7
fmt.Print(a&Readable==Readable,a&Writable==Writable,a&Excutable==Excutable)
fmt.Println()
b:=a^&Readable
fmt.Print(b&Readable==Readable,b&Writable==Writable,b&Excutable==Excutable)
fmt.Println()
c:=a^&Writable
fmt.Print(c&Readable==Readable,c&Writable==Writable,c&Excutable==Excutable)
fmt.Println()
d:=a^&Excutable
fmt.Print(d&Readable==Readable,d&Writable==Writable,d&Excutable==Excutable)
fmt.Println()
}
为了更好懂一点点,我加了点注释
是不是清晰明了了~
记录3 就到这里吧
网友评论