开篇——进制转换

发布时间 2023-06-29 16:29:02作者: 假行僧me

十进制对任意进制数转换时,将其除以进制类型取余倒序排列
其他进制之间的转换使用“8421”法:

1.1.十进制——>二进制(以一个位数为单位进行分割)

8+4+2+1=15可以写成:

2^3+2^2+2^1+2^0=15

若十进制数大于15,则依次按照2的阶次增加数值,且该数值必须大于该十进制数。
比如对于十进制数39(>15):

2^5+2^4+2^3+2^2+2^1+2^0=63

比如:

10=8+2=8+0+2+0

8 4 2 1四位数上,只有8 2上对应有数值,因此记为1,其它空位记为0.因此10转换为二进制为1010
再比如

39=32+0+0+4+2+1

16 8上空位,则39转换为十进制为100111

1.2.十进制——>八进制(以三个位数为单位进行分割)

八进制数:0 1 2 3 4 5 6 7
比如:

39=32+0+0+4+2+1

根据8 4 2 1法可得:

(39)_2=100111

利用4 2 1为一组进行分割,不够用0补:

1 0 0 | 1 1 1
4 2 1 | 4 2 1

三位为一组,只看对应于14 2 1,并将满足条件的值相加:
第一组:4 + 0 + 0 = 4;
第二组:4 + 2 + 1 = 7
则:

(39)_8=47

1.3. 十进制——>十六进制(以四个位数为单位进行分割)

同样的取39为例:其二进制数为100111,只有六位,以四位为一组时需补0:

0 0 1 0 | 0 1 1 1
8 4 2 1 | 8 4 2 1

四位为一组,只看对应于18 4 2 1,并将满足条件的值相加:
第一组:0 + 0 + 2 + 0 = 2;
第二组:0 + 4 + 2 + 1 = 7
则:

(39)_{16}=27

注意: 在C语言中,二进制不会被直接识别头部加0b,对于八进制需在头部添加 0,对于十六进制则需要在头部添加0x