深入理解计算机进制知识

344 阅读5分钟

1.进制

对于整数,有四种进制表示方式

(1)二进制:0,1, 满2进1

(2)十进制:0-9, 满10进1

(3)八进制:0-7, 满8进1,以数字0开头表示,如017

(4)十六进制:0-9以及A-F,满16进1,以0x或者0X开头表示,A-F不区分大小写。如0x2F5A

2.进制转换

2.1 其他进制转十进制

通用规则:从最低为开始(右边的),将每个位上的数提取出来,乘以位数(位数-1)次方,然后求和。

2.1.1 二进制转十进制

规则:从最低为开始(右边的),将每个位上的数提取出来,乘以2(位数-1)次方,然后求和。

例子:1011转十进制:1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 11

2.1.2 八进制转十进制

规则:从最低为开始(右边的),将每个位上的数提取出来,乘以8(位数-1)次方,然后求和。

例子:01011转十进制:1*8^3 + 0*8^2 + 1*8^1 + 1*8^0 = 521

2.1.3 十六进制转十进制

规则:从最低为开始(右边的),将每个位上的数提取出来,乘以16(位数-1)次方,然后求和。

例子:0x1011转十进制:1*16^3 + 0*16^2 + 1*16^1 + 1*16^0 = 4113

2.2 十进制转其他进制

通用规则:将该数不断除以要转的进制数,直到商为0为止,然后将每步的到的余数倒过来,就是对应的进制的结果。

2.2.1 十进制转二进制

规则:将该数不断除以2,直到商为0为止,然后将每步的到的余数倒过来,就是对应的二进制。 例子:56转二进制

56 ÷ 2 = 230
23 ÷ 2 = 140
14 ÷ 2 = 70
7 ÷ 2 = 31
3 ÷ 2 = 11 
1 ÷ 2 = 01
那么得到的余数倒过来就是:111000,也就是说56转二进制就是111000

2.2.2 十进制转八进制

规则:将该数不断除以8,直到商为0为止,然后将每步的到的余数倒过来,就是对应的八进制。 例子:56转八进制

56 ÷ 8 = 70
7 ÷ 8 = 07

那么得到的余数倒过来就是:70(八进制前面用0来标识,这个是固定的,所以八进制是070),也就是说56转八进制就是070

2.2.3 十进制转十六进制

规则:将该数不断除以16,直到商为0为止,然后将每步的到的余数倒过来,就是对应的十六进制。 例子:56转十六进制

56 ÷ 16 = 38
3 ÷ 16 = 03
那么得到的余数倒过来就是:70(十六进制前面用0x或者0X来标识,这个是固定的,所以十六进制是0x38或者0X38),也就是说56转十六进制就是0x38或者0X38

2.3 二进制转八进制或者十六进制

2.3.1 二进制转八进制

规则:将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可。 例子:11010101转成八进制

分组 11 010 101
每组转八进制:二进制 11 转成八进制是 3, 二进制 010 转成八进制是 2 ,二进制101转成八进制是5,所以11010101转成八进制的结果是:0325

2.3.2 二进制转十六进制

规则:将二进制数每四位一组(从低位开始组合),转成对应的十六进制数即可。 例子:11010101转成十六进制

分组 1101 0101
每组转十六进制:二进制 1101 转成十六进制是 D, 二进制 0101 转成八进制是 5,所以11010101转成十六进制的结果是:0xD5

为什么二进制转八进制要选三位一组,而二进制转十六进制要选四位一组呢?

因为二进制中的三位正好能用一位八进制来标识,三位二进制能表示的数的范围是0-7,正好一位八进制能标识的范围也是0-7

同理,四位二进制能表示的范围是 0-15,而八进制的0-F正好表示的就是0-15这个范围内的数据。

2.4 八进制或者十六进制转二进制

2.4.1 八进制转二进制

规则:将八进制的每一位,转成对应的一个三位的二进制即可(回看上一部分,是不是很熟悉)。 例子:0237转成二进制:

2 -> 010
3 -> 011
7 -> 111

那么0237转成二进制就是10011111

2.4.2 十六进制转二进制

规则:将十六进制的每一位,转成对应的一个四位的二进制即可(回看上一部分,是不是很熟悉)。 例子:0x237转成二进制:

2 -> 0010
3 -> 0011
7 -> 0111

那么0x237转成二进制就是1000110111