《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 的别名
* 20
)
 
func
    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
12 & 22)
12 | 22)
12 ^ 22)
12 &^ 22)
}

上述代码输出结果:
4
30
26
8


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

例子:
 
package main
 
 
 
import (
 
    "fmt"
 
)
 
 
 
func
 
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 位取反",
 
uint(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


 

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