《Go编程基础》视频第4课: 常量与运算符 笔记

《Go编程基础》视频 第4课: 常量与运算符 笔记,视频上有些内容讲的对我来说不是很清楚,附加的找了一些资料补充了这些信息。

视频地址: http://www.tudou.com/programs/view/evSrdqTW9zg/

作者的视频笔记地址: https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture4/lecture4.md

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

参考资料: http://play.golang.org/p/idG7Ri_krU

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位取反

000001101106110

-0000111 -111 -711111111111111111111111111111001

原理 比如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