4.5 基本类型和运算符
...大约 3 分钟
4.5 基本类型和运算符
4.5.1 布尔型 bool
- 值:
true或false 
逻辑运算符
 == 和 !=
只有类型相同的值才能进行比较(若为 interface 则需要实现相同的接口)。
Golang 没有隐式类型转换,所有类型转换需要进行显示说明。
 ! 逻辑 非
!T -> false
!F -> true
 && 逻辑 与
只有两边都为 true 时为 true
&& 左边为 false, 右边表达式不会执行
T && T -> true
T && F -> false
F && F -> false
F && T -> false
 || 逻辑 或
只有两边都为 false时为false
|| 左边为true,右边不会执行
T || T -> true
T || F -> true
F || T -> true
F || F -> false
4.5.2 数字类型
整型和浮点型
- 基于架构: 
int和uint: 32 位和 64 位系统分别为 32 和 64 位。uintptr: 长度位足够存放一个指针。
 - 固定大小: 
- 整数:
int8,int16,int32,int64 - 无符号整数: 
uint8,uint16,uint32,uint64 - 浮点数(IEEE-754 标准):
float32,float64 
 - 整数:
 - 默认值:整型为 
0, 浮点型为0.0 - 精度: 
float32: 小数点后 7 位float64: 小数点后 15 位
 - 进制: 
- 八进制:前缀为 
0,如077 - 十六进制:前缀为 
0x, 如:0xFF 
 - 八进制:前缀为 
 - 科学计数法:
e,1e3: 1000,3.1e2L: 310 
复数
complex64: 32位实数和虚数complex128: 64位实数和虚数
位运算
位运算只能用于整型,且位数相同
 & 按位 与
1 & 1 -> 1
1 & 0 -> 0
0 & 1 -> 0
0 & 0 -> 0
 | 按位 或
1 | 1 -> 1
1 | 0 -> 1
0 | 1 -> 1
0 | 0 -> 0
 ^ 按位 异或
1 ^ 1 -> 0
1 ^ 0 -> 1
0 ^ 1 -> 1
0 ^ 0 -> 0
 &^ 位清除
将指定位置的值置 0
15 &^ 4 -> 1011 // 1111 &^ 0100 -> 1011
 ^ (一元运算符)按位补足
^x 表示为 m^x:
x无符号,则m:全部位置1x有符号,则m为 -1
func main() {
	var a int8 = 2
	fmt.Println("int8")
	fmt.Printf("a: %b\n", a)
	fmt.Printf("^a: %b\n", ^a)
	var aa int8 = -2
	fmt.Printf("aa %b\n", aa)
	fmt.Printf("^aa %b\n", ^aa)
	
	fmt.Println("uint8")
	var b uint8 = 2
	fmt.Printf("b %b\n", b)
	fmt.Printf("^b %b\n", ^b)
}
int8
 a: 00000010
^a: -0000011
 aa -0000010
^aa 00000001
uint8
 b 00000010
^b 11111101
 << 位左移
X << n: 向左移动n位,右侧填充0。 相当于X乘以 2 的 n 次方
1 << 10 // 1024
2 << 10 // 2048
 >> 位右移
X >> n:向右移动n位,左侧填充0。 相当于X除以 2 的 n 次方
1024 >> 10 // 1
例:
使用位左移与 iota 计数配合可优雅地实现存储单位的常量枚举:
type ByteSize float64
const (
	_ = iota // 通过赋值给空白标识符来忽略值
	KB ByteSize = 1<<(10*iota)
	MB
	GB
	TB
	PB
	EB
	ZB
	YB
)
在通讯中使用位左移表示标识的用例
type BitFlag int
const (
	Active BitFlag = 1 << iota // 1 << 0 == 1
	Send // 1 << 1 == 2
	Receive // 1 << 2 == 4
)
flag := Active | Send // == 3
逻辑运算
| 运算符 | 含义 | 示例 | 
|---|---|---|
| == | 等于 | 1 == 1 // true | 
| != | 不等于 | 1 != 1 // false | 
| < | 小于 | 1 < 2 // true | 
| > | 大于 | 1 > 2 // false | 
| <= | 小于或等于 | 1 < 2 // true 2 <= 2 // true  | 
| >= | 大于或等于 | 1 >= 2 // false 2 >= 2 // true  | 
算数运算
| 运算符 | 含义 | 示例 | 
|---|---|---|
| + | 加 | |
| - | 减 | |
| * | 乘 | |
| / | 除 | - 整数不允许除以 0 - 浮点数除以 0.0 为 +Inf 正无穷  | 
| % | 取余 | 9 % 4 // 1 | 
| ++ | 递增 | 只能用于后缀,且不能作为表达式 n++ // OK a := n++ // 无效  | 
| –- | 递减 | 只能用于后缀,且不能作为表达式 n –-// OK a := n– // 无效  | 
4.5.3 字符
字符是整型的特殊用例。
byte: ASCII,uint8别名rune: Unicode(UTF-8),int32别名
 Powered by  Waline  v2.15.2
