常量
go常量使用const关键字声明,常量没有类型,例如在开算术平方根时,不需要加转换
/*
常量
*/
package main
import (
"fmt"
"math"
)
func main() {
const a, b = 3, 4
//var len int = (int)(math.Sqrt(float64(a*a + b*b)))
//常量没有类型,这里可以不加float64转换
var len int = (int)(math.Sqrt(a*a + b*b))
fmt.Println("len = ", len)
}
枚举
go没有枚举关键字enum,可以用const变量来代替
/*
go 枚举类型
go没有枚举关键字enum,可以用const变量来代替
*/
package main
import "fmt"
func main() {
const (
java = 1
cpp = 2
golang = 3
python = 4
)
fmt.Println(java, cpp, golang, python)
const (
beijing = iota
shangahi
_
shenzhen
)
fmt.Println(beijing, shangahi, shenzhen) //输出 0 1 3
}
小技巧:如果值不需要,可以用"_"表示
iota的用法
iota默认值是0,往下递增,例如
package main
import "fmt"
func main() {
const (
zero = iota
one
two
three
)
fmt.Println(zero, one, two, three)
//iota的神奇用法
const (
byte = 1 << (10 * iota)
kb
mb
gb
)
fmt.Println(byte, kb, mb, gb)
}
位运算介绍
位运算符——左移、右移
>>
:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
<<
:左移 左边最高位丢弃,右边补齐0
>>>
:无符号右移 无论最高位是0还是1,左边补齐0
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方
右移一位相当于除2,右移n位相当于除以2的n次方。
12>>1 结果:6 12/2^1
12>>2 结果:3 12/2^2
12<<1 结果 :24 ` 12x2^1
12<<2 结果 :48 12x2^2
位运算基础
&
按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
|
按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1
^
按位异或
若参加运算的两个二进制位值相同则为0,否则为1
~
取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1
<<
左移
用来将一个数的各二进制位全部左移N位,右补0
>>
右移
将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0