目录
前言
本章我们将学习C语言中的进制转换,包含2进制、8进制、10进制、16进制之间的相互转换,话不多说我们开始今天的学习
一、权重的概念
权重是指某一因素或指标相对于某一事物的重要程度,拿10进制举例来说,给一个数123,个位的权重是10^0,十位的权重是10^1,百位的权重则是10^2
将这个概念类比拓展,2进制个位权重是2^0,十位权重是2^1,10进制个位权重是10^0,16进制个位权重是16^0
二、2进制与10进制的相互转化
(1)2进制转10进制
我们利用前面学习的权重的概念可以完成2进制到10进制的转化
首先我们将已知的2进制数用对应位乘上对应位的权重再求和,由于10进制用同样操作得到的值是他本身(如10进制的123得出来的值就是123),那么我们用2进制转换得出来的数便是一个10进制数
给定一个2进制数 1011 ,对应位乘上对应位的权重:1*2^3 0*2^2 1*2^1 1*2^0
求和:1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 11
得到的这个值11便是10进制的表示形式
(2)10进制转2进制
我们这里介绍一种用2整除的方法
用2整除10进制整数,得到一个商和余数;再用2去除商,又会得到一个商和余数,如此重复,直到商为小于1时为止,然后把先得到余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,以此排列起来
三、2进制与8进制、16进制的相互转化
2进制转8进制
8进制的数字每一位是0~7的,0~7的数字,各自写成2进制,最多有3个2进制位就足够了,比如7的二 进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算一个8进制位,剩余不够3个2进制位的直接换算
如:2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制
2进制转16进制
16进制的数字每一位是0~9,a~f的,0~9,a~f的数字,各自写成2进制,最多有4个2进制位就足够了, 比如f的二进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进 制位会换算⼀个16进制位,剩余不够4个二进制位的直接换算
如:2进制的01101011,换成16进制:0x6b,16进制表示的时候前面加0x
16、8进制转2进制
我们直接将前面的步骤逆过来,如16进制每一位换算成4个2进制位,8进制每一位换算成3个2进制位
四、8进制、16进制、10进制之间的相互转化
8进制、16进制转10进制同2进制转10进制相同,利用公式计算出的值即是要求的结果
10进制转8进制、16进制则先将10进制转换为2进制,再将2进制进行转换
本章到这里就结束啦,希望各位小伙伴可以点个关注,支持一下阿鹿,大家的鼓励是我前进的第一动力,3Q~