record 3

2019-06-24  本文已影响0人  黑键手记

本记录只记录两条

一、数组相同的判断

我们在用别的语言的时候,数组其实属于应用数据类型,所以做判断只对数组的引用做判断,而在 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 就到这里吧

上一篇下一篇

猜你喜欢

热点阅读