go基本类型和运算符

1.布尔类型 bool

非运算符:!

!T -> false
!F -> true

和运算符:&&

T && T -> true
T && F -> false
F && T -> false
F && F -> false

或运算符:||

T || T -> true
T || F -> true
F || T -> true
F || F -> false

2.数字类型

Go 语言支持整型和浮点型数字,并且原生支持复数。 Go 也有基于架构的类型,例如:int、uint 和 uintptr。 这些类型的长度都是根据运行程序所在的操作系统类型所决定的:

  • int 和 uint 在 32 位操作系统上,它们均使用 32 位(4 个字节),在 64 位操作系统上,它们均使用 64 位(8 个字节)。
  • uintptr 的长度被设定为足够存放一个指针即可。

整数:

  • int8(-128 -> 127)
  • int16(-32768 -> 32767)
  • int32(-2,147,483,648 -> 2,147,483,647)
  • int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)

无符号整数:

  • uint8(0 -> 255)
  • uint16(0 -> 65,535)
  • uint32(0 -> 4,294,967,295)
  • uint64(0 -> 18,446,744,073,709,551,615)

int 型是计算最快的一种类型。 整型的零值为 0,浮点型的零值为 0.0。 **float32 精确到小数点后 7 位,float64 精确到小数点后 15 位。**由于精确度的缘故,你在使用 == 或者 != 来比较浮点数时应当非常小心。你最好在正式使用前测试对于精确度要求较高的运算。 你应该尽可能地使用 float64,因为 math 包中所有有关数学运算的函数都会要求接收这个类型。 你可以通过增加前缀 0 来表示 8 进制数(如:077),增加前缀 0x 来表示 16 进制数(如:0xFF),以及使用 e 来表示 10 的连乘(如: 1e3 = 1000,或者 6.022e23 = 6.022 x 1e23)。 你可以使用 a := uint64(0) 来同时完成类型转换和赋值操作,这样 a 的类型就是 uint64。

package main

import "fmt"

func main() {
    var n int16 = 34
    var m int32
    // compiler error: cannot use n (type int16) as type int32 in assignment
    //m = n
    m = int32(n)

    fmt.Printf("32 bit int is: %d\n", m)
    fmt.Printf("16 bit int is: %d\n", n)
}
//输出:
32 bit int is: 34
16 bit int is: 34

格式化说明符

**%d **用于格式化整数(%x 和 %X 用于格式化 16 进制表示的数字 **%g **用于格式化浮点型(%f 输出浮点数,%e 输出科学计数表示法) **%0d **用于规定输出定长的整数,其中开头的数字 0 是必须的

3.数字类型

Go 拥有以下复数类型: complex64 (32 位实数和虚数) complex128 (64 位实数和虚数) 复数使用 re+imI 来表示,其中 re 代表实数部分,im 代表虚数部分,I 代表根号负 1。 在使用格式化说明符时,可以使用 %v 来表示复数,但当你希望只表示其中的一个部分的时候需要使用 %f

4.位运算

二元运算符

  • 按位与 &:
  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

二元运算符

  • 按位补足 ^: 该运算符与异或运算符一同使用,即 m^x,对于无符号 x 使用“全部位设置为 1”,对于有符号 x 时使用 m=-1。例如:
  ^2 = ^10 = -01 ^ 10 = -11
  • 位左移 «: 用法:bitP « n。 bitP 的位向左移动 n 位,右侧空白部分使用 0 填充;如果 n 等于 2,则结果是 2 的相应倍数,即 2 的 n 次方。例如:
    1 << 10 // 等于 1 KB
    1 << 20 // 等于 1 MB
    1 << 30 // 等于 1 GB
  • 位右移 »: 用法:bitP » n。 bitP 的位向右移动 n 位,左侧空白部分使用 0 填充;如果 n 等于 2,则结果是当前值除以 2 的 n 次方。
    1 << 10 // 等于 1 KB
    1 << 20 // 等于 1 MB
    1 << 30 // 等于 1 GB

位左移常见实现存储单位的用例

使用位左移与 iota 计数配合可优雅地实现存储单位的常量枚举:

type ByteSize float64
const (
    _ = iota // 通过赋值给空白标识符来忽略值
    KB ByteSize = 1<<(10*iota)
    MB
    GB
    TB
    PB
    EB
    ZB
    YB
)

5.运算符与优先级

优先级 运算符
7 ^ !
6 * / % « » & &^
5 + - | ^
4 == != < <= >= >
3 <-
2 &&
1 ||

6.字符类型

格式化说明符

%c 用于表示字符 当和字符配合使用时,%v 或 %d 会输出用于表示该字符的整数 %U 输出格式为 U+hhhh 的字符串

  • 判断是否为字母:unicode.IsLetter(ch)
  • 判断是否为数字:unicode.IsDigit(ch)
  • 判断是否为空白符号:unicode.IsSpace(ch)