4.5 基本类型和运算符

Kesa...大约 3 分钟

4.5 基本类型和运算符

4.5.1 布尔型 bool

  • 值:truefalse

逻辑运算符

==!=

只有类型相同的值才能进行比较(若为 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 数字类型

整型和浮点型

  • 基于架构:
    • intuint : 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
  • 科学计数法:e1e3: 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:全部位置1
  • x 有符号,则 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