《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