《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