常量的定义
一般要求全部大写,如:const MONDAY= iota
与首字母大写的、可被外部访问的量区分
与所有字母小写的、只可被内部访问的量区分
单个定义
package main
const a int = 1
const b = 'A'
const (
c = a
d = a+1
)
func main() {
}
多个定义
package main
const a, b, c = 1, "2", 'c'
const (
d, e, f = 1, 2, 3
)
func main() {
}
初始化规则
第一种:
package main
import "fmt"
const (
a = 1
b
c
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
结果:
第二种:
package main
import "fmt"
const (
a, b = 1, "2"
c, d //这里需要一一对应哦
)
func main() {
fmt.Println(a,b)
fmt.Println(c,d)
}
结果:
不可用变量给常量赋值
错例如
var s = “123”
const a = len(s)
iota
每次遇到 (const 定义常量),iota 从0开始算
package main
import "fmt"
const (
a = 'A' //这里其实iota 已经从0开始算了
b
c = iota
d
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
结果:
package main
import "fmt"
const (
a = 'A' //这里其实iota 已经从0开始算了
b = iota
c = 'B'
d = iota
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
结果:
package main
import "fmt"
const (
a = 'A' //这里其实iota 已经从0开始算了
b = iota
c = 'B'
d = iota
)
const e = iota //每次定义常量, iota重新开始算
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
}
结果:
运算符
package main
import (
"fmt"
"strconv"
)
func main() {
var a uint = 60 /* 60 = 0011 1100 */
var b uint = 13 /* 13 = 0000 1101 */
var c uint = 0
fmt.Println("60的二进制为\t13的二进制为\n",strconv.FormatInt(60,2),"\n",strconv.FormatInt(13,2))
fmt.Println("前面补满0至8位\n","0011 1100\n","0000 1101")
c = a & b /* 12 = 0000 1100 */
fmt.Println("二进制结果为\n","0000 1100")
fmt.Printf("第一行 - c 的值为 %d\n", c )
c = a | b /* 61 = 0011 1101 */
fmt.Println("二进制结果为\n","0011 1101")
fmt.Printf("第二行 - c 的值为 %d\n", c )
c = a ^ b /* 49 = 0011 0001 */
fmt.Println("二进制结果为\n","0011 0001")
fmt.Printf("第三行 - c 的值为 %d\n", c )
c = a << 2 /* 240 = 1111 0000 */
fmt.Println("二进制结果为\n","1111 0000")
fmt.Printf("第四行 - c 的值为 %d\n", c )
c = a >> 2 /* 15 = 0000 1111 */
fmt.Println("二进制结果为\n","0000 1111")
fmt.Printf("第五行 - c 的值为 %d\n", c )
}
这里设a=60,b=13
运算符 | 二进制结果 | 十进制结果 | 意思 |
---|---|---|---|
0011 1100 | 60 | ||
0000 1101 | 13 | ||
& | 0000 1100 | 12 | 都有1位为1 |
l | 0011 1101 | 61 | 有1位为1 |
^ | 0011 0001 | 49 | 不同位为1 |
&^ | 1111 0010 | 242 | 与后面的b相反 |
对a << | 1111 0000 | 240 | 左移n位就是乘以2的n次方 |
对a >> | 0000 1111 | 15 | 左移n位就是乘以2的n次方 |