《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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示