【一Go到底】第九天---进制

143 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

一、进制介绍

进制分类范围进制方式
二进制0,1满2进1
八进制0-7满8进1,以数字0开头表示
十进制0-9满10进1
十六进制0-9,A-F满16进1,以0x或0X开头表示

十进制二进制八进制十六进制
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A

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