在Go语言中,二进制是一种基础的数字表示方法,具有以下特点:
一、基本定义
二进制仅使用两个数字 0和 1来表示数值,每一位代表2的幂次方。例如:
二进制数 `101101` 转换为十进制为:
$$1 times 2^5 + 0 times 2^4 + 1 times 2^2 + 1 times 2^0 = 32 + 0 + 4 + 1 = 37$$
二、与十进制的转换
十进制转二进制:通过不断除以2取余数,逆序排列。例如将23.375转二进制:
$$23 div 2 = 11 text{ 余 }1 rightarrow 11 div 2 = 5 text{ 余 }1 rightarrow dots rightarrow 1.1 text{ 余 }1$$
结果为 `10111.011`。
二进制转十进制:按权展开求和。例如将 `1011` 转换:
$$1 times 2^3 + 0 times 2^2 + 1 times 2^1 + 1 times 2^0 = 8 + 0 + 2 + 1 = 11$$。
三、Go语言中的二进制操作
- `uint8`, `uint16`, `uint32` 等无符号整数类型内部以二进制形式存储。
- `int8`, `int16`, `int32` 等有符号整数类型默认使用二进制补码表示。
位操作符
支持与、或、非、异或等操作,例如:
```go
a := 0b1010 // 二进制表示的10
b := 0b1100 // 二进制表示的12
c := a | b // 按位或操作,结果为 0b1110 (14)
```
二进制文件读写
使用 `ioutil.ReadFile` 和 `os.WriteFile` 等函数进行二进制文件操作。
格式化输出
通过 `%b` 格式化动词将整数以二进制字符串输出,例如:
```go
fmt.Printf("0b%bn", 23) // 输出 0b10101
```
转换函数
- 使用 `strconv.FormatBinary` 将整数转换为二进制字符串:
```go
binaryStr := strconv.FormatBinary(23) // "10101"
```
- 使用 `strconv.ParseBinary` 将二进制字符串转换为整数:
```go
num, err := strconv.ParseBinary("10101") // num=23, err nil
```
四、应用场景
网络通信:二进制协议(如TCP/IP)的底层实现。
加密算法:如RSA、SHA系列依赖二进制运算。
总结
Go语言的二进制支持贯穿基础数据类型、操作符及文件操作,适合需要高效处理二进制数据的场景。其内置函数简化了进制转换和二进制数据处理,同时提供灵活的位级操作能力。