持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
一、进制介绍
| 进制分类 | 范围 | 进制方式 |
|---|---|---|
| 二进制 | 0,1 | 满2进1 |
| 八进制 | 0-7 | 满8进1,以数字0开头表示 |
| 十进制 | 0-9 | 满10进1 |
| 十六进制 | 0-9,A-F | 满16进1,以0x或0X开头表示 |
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
1.1 二进制
在golang中,不能直接使用二进制来表示-一个整数,它沿用了c的特点。
表示方法
package main
import "fmt"
func main() {
var a = 10
fmt.Printf("a binary = %b", a)
}
1.2 八进制
可直接表示
package main
import "fmt"
func main() {
// 这里直接表示 八进制数
var i int = 012 //十进制数为 10
fmt.Println("i = ", i)
}
1.3 十六进制
可直接表示
package main
import "fmt"
func main() {
// 这里直接表示 十六进制
var i int = 0x14 // 十进制数为20
fmt.Println("i = ", i)
}
二、进制转换
2.1 其他进制 转 十进制
2.1.1 二进制 转 十进制
规则:从最低位开始(右边的),将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
案例 二进制数 1011 转 十进制
1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 11
2.1.2 八进制 转 十进制
规则:从最低位开始(右边的),将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
案例 八进制数 0123 转 十进制
3*8^0 + 2*8^1 + 1*8^2 = 83
2.1.3
规则:从最低位开始(右边的),将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
案例 十六进制数 0x34A 转 十进制
A*16^0 + 4*16^1 + 3*16^2 = 768
2.2 十进制 转 其他进制
2.2.1 十进制 转 二进制
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
2.2.2 十进制 转 八进制
规则:将该数不断除以8,直到商为为止,然后将每步得到的余数倒过来,就是对应的八进制。
2.2.3 十进制 转 十六进制
规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
2.3 二进制 转 其他进制
2.3.1 二进制 转 八进制
规则:将二进制数每三位一组(从低 位开始组合),转成对应的八进制数即可。
案例:请将二进制: 11010101转成八进制
11 010 101 ==> 3 2 5 ==> 0325
2.3.2 二进制 转 十六进制
规则:将二进制数每四位一组(从低 位开始组合),转成对应的十六进制数即可。
案例:请将二进制: 11010101 转成十六进制
1101 0101 ==> D 5 ==> 0xD5
2.4 其他进制 转 二进制
2.4.1 八进制 转 二进制
规则:将八进制数每1位,转成对应的一一个3位的二进制数即可。
案例:请将0237转成二进制
0237 ===> 010 011 111 ===> 1011111
2.4.2 十六进制 转 二进制
规则:将十六进制数每1位,转成对应的一个4位的二进制数即可。
案例:请将0x237转成二进制
0x237 ===> 0010 0011 0111 ===> 1000110111