作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.数据类型概述
Go语言的基本类型和其他语言大同小异,数据类型分为基本数据类型和高级(派生)数据类型。
1.基本数据类型
数值型:
- 整数类型(int,int8,int16,int32,int64,uint8,uint16,uint32,uint64,byte,rune)
- 浮点类型(float32,float64)
- 复数(complex64,complex128)
字符型:
- 没有单独的字符型,使用byte类型来保存单个字母字符。
布尔型:
- 对应的类型为bool,有效值为: true|false
字符串:
- 对应string。
2.高级数据类型
- 指针
- 数组
- 结构体
- 管道
- 函数
- 切片
- 接口
- map
二.进制和进制转换
1.进制概述
所谓"进制"就是"逢几进1"的问题,平时生活中用的最多的就是: 十进制。
计算机用二进制最多。
计算机如何区分进制呢?
- 二进制:
要求以"0b"开头,如:"0b101"
- 八进制:
要求以0开头,如:"017"。
- 十进制:
就是我们平时所写,所见即所得,比如: "99"。
- 十六进制:
要求以"0x"或者"0X"开头,如:"0x1F"
2.进制转换案例
- 二进制转换为十进制:
比如: "0b1101"
计算过程: 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 8 + 4 + 0 + 1 = 13
- 十进制转换为二进制:
比如: "13"
计算过程: 将余数部分倒过来读,得到的二进制为"0b1101"。
除数 | 被除数 | 余数
2 13
2 6 1
2 3 0
2 1 1
0 1
- 八进制转换为十进制:
比如: "017"
计算过程: 1*8^1 + 7*8^0 = 8 + 7 = 15
- 十进制转换为八进制:
比如: "25"
计算过程: 将余数部分倒过来读,得到的八进制为"031"。
除数 | 被除数 | 余数
8 25
8 3 1
0 3
- 八进制转换为16进制:
比如: "015"
解题思路: 把十进制当作一个中转站,先将八进制转换为十进制,再把十进制转换为十六进制。
温馨提示: 实际上根本就不用自己转换这么麻烦,我们可以直接使用系统中提供给我们的计算器(程序员模式),或者在线进制转换的网页进行操作即可。
3.数字字面量语法(Number literals syntax)
package main
import (
"fmt" // 我们可以借助fmt函数来将一个整数以不同进制形式展示。
)
func main() {
// 注意,系统默认识别的是十进制数字哟~
var a int = 10
fmt.Printf("a ---> %d \n", a) // 10 占位符%d表示整形,默认以十进制显示哟~
fmt.Printf("a ---> %b \n", a) // 1010 占位符%b表示二进制
// Go1.13版本之后引入了数字字面量语法,这样便于开发者以二进制、八进制或十六进制浮点数的格式定义数字
// 二进制 以b开头
b := 0b1010
fmt.Printf("b ---> %d \n", b) // 10
fmt.Printf("b ---> %b \n", b) // 1010
// 八进制 以0开头
var c int = 077
fmt.Printf("c ---> %d \n", c) // 63
fmt.Printf("c ---> %o \n", c) // 77 占位符%o表示八进制,原样输出八进制数字。
fmt.Printf("c ---> %O \n", c) // 0o77 占位符%O表示八进制,在原样输出的八进制数字前多了一个"0o"哟~
// 十六进制 以0x开头
var d int = 0xff
fmt.Printf("d ---> %d \n", d) // 255
fmt.Printf("d ---> %x \n", d) // ff 占位符%x表示十六进制,输出是小写字母
fmt.Printf("d ---> %X \n", d) // FF 占位符%X表示十六进制,输出是大写字母
}
三.原码反码补码
推荐阅读:
https://www.cnblogs.com/yinzhengjie/p/8666354.html