《Go編程基礎》視頻第4課: 常量與運算符 筆記


《Go編程基礎》視頻 第4課: 常量與運算符 筆記,視頻上有些內容講的對我來說不是很清楚,附加的找了一些資料補充了這些信息。

 

視頻地址: http://www.tudou.com/programs/view/evSrdqTW9zg/

作者的視頻筆記地址: https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture4/lecture4.md

1、類型別名

rune是int32的別名,byte是uint8的別名。所以我們直接可以對 rune 類型做數學運算。

package main

 

import (

    "fmt"

    "reflect"

)

 

const (

    b   = 'A'  // rune int32

    num = b * 20

)

 

func main() {

    fmt.Println(b)

    fmt.Println(reflect.TypeOf(b))

    fmt.Println(num)

}

輸出:

65

int32

1300


2、Golang的位運算


package main

 

import (

    "fmt"

)

 

/*

            二進制   十進制

            01100   12

            10110   22

-----------------------

二元位運算符  二進制   十進制    邏輯

    &       00100   4        相同位的兩個數字­都為1,則為1;若有一個不為1,則為0

    |       11110   30       相同位只要一個為1即為1。否則為0

    ^       11010   26       相同位不同為1則為1,否則為0。

    &^      01000   8        如果第二個數是1,則強制把第一個數改成0,否則不變。

*/

 

func main() {

    fmt.Println(12 & 22)

    fmt.Println(12 | 22)

    fmt.Println(12 ^ 22)

    fmt.Println(12 &^ 22)

}


上述代碼輸出結果:

4

30

26

8


3、一元運算符^ (按位取反)

例子:

 

package main

 

 

 

import (

 

    "fmt"

 

)

 

 

 

func main() {

 

    var n int = 6

 

 

 

    fmt.Printf("%s\n%08b\t%b\t%d\t%b\n%08b\t%b\t%d\t%b\n\n",

 

        "^6 位取反",

 

        n, n, n, uint(n),

 

        ^n, ^n, ^n, uint(^n))

 

}

這個演示代碼的輸出:

 

 

 

 ^6位取反

  00000110  110    6  110

  -0000111  -111  -7  11111111111111111111111111111001



原理 比如32位編譯器,所以

10(10進制) = 00000000 00000000 00000000 00001010 (2進制)
^10 = 11111111 11111111 11111111 11110101 = -11

http://bbs.csdn.net/topics/80332256

 

 

1的二進制表示
00000001

取反變成
11111110
這個數就是-2
簡單點說就是正數a取反=-(a+1),當然不能超數數字表示范圍

 

 

參考資料:

Go位運算:取反和異或
http://bbs.studygolang.com/thread-52-1-1.html

位操作
http://zh.wikipedia.org/wiki/%E4%BD%8D%E6%93%8D%E4%BD%9C 

 

 

參考資料:

http://ilovers.sinaapp.com/doc/golang-specification.html#Operators 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM