record 3

作者: 黑键手记 | 来源:发表于2019-06-24 15:59 被阅读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 就到这里吧

    相关文章

      网友评论

          本文标题:record 3

          本文链接:https://www.haomeiwen.com/subject/vafoqctx.html