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.1e2
L: 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