进制转换
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。—— 百度百科
现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是“逢2进1”,数字1在同的位上表示不同的值,按从右至左的次序,这个值以二倍递增。
在计算机的内部,运行各种运算时,都是以二进制的方式来运行的。
对于整数,常用的进制有二进制、八进制、十进制以及十六进制
- 二进制: 0, 1,满2进1
- 八进制: 0 - 7,满8进1,计算机内以0开头表示
- 十进制:0 - 9, 满10进1
- 十六进制: 0-9及A-F,满16进1,计算机内以0x或者0X开头表示。此处的A-F不区分大小写,如0x21AF+1 = 0X21B0
在golang中,不能直接使用二进制来表示一个整数,它沿用了C的特点。但是可以以二进制的形式输出它。
var i int = 5
//二进制输出
fmt.Printf("%b", i) //输出101
var j int = 011
fmt.Println("j = ", j) //输出9
var k int = 0x11
fmt.Println("k = ", k) //输出17
不同进制的对比
十进制 | 十六进制 | 八进制 | 二进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 2 | 2 | 10 |
3 | 3 | 3 | 11 |
4 | 4 | 4 | 100 |
5 | 5 | 5 | 101 |
6 | 6 | 6 | 110 |
7 | 7 | 7 | 111 |
8 | 8 | 10 | 1000 |
其他进制转十进制
规则:从最低位开始(右边的),将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
二进制转十进制
1011 = 1 * 23+0 * 2 2+1 * 2 1+1 * 20 = 8 + 2 + 1 = 11
八进制转十进制
01011 = 1 * 83 + 0 * 82 + 1 * 81 + 1 * 80 = 521
十六进制转十进制
0x1011 = 1 * 163 + 0 * 162 + 1 * 161 + 1 * 160 = 4113
十进制转其他进制
十进制转二进制
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
十进制转八进制
规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。
十进制转十六进制
规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
二进制转其他进制
二进制转八进制
规则:将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可。
如:11010101 => (11)(010)(101) => 0325
二进制转十六进制
规则:将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可。
如:11010101 => (1101)(0101) =>0xD5
其他进制转二进制
八进制转二进制
规则:将八进制的每1位,转成对应的一个三位的二进制数即可。
如:0237 => (010)(011)(111) => 10011111
十六进制转二进制
规则:将八进制的每1位,转成对应的一个四位的二进制数即可。
如:0x237 => (0010)(0011)(0111) => 1000110111