c语言进制之间的转换

一、二进制八进制十六进制转十进制

二进制、八进制和十六进制向十进制转换遵循“按权相加”的方法。所谓“权”,也即“位权”

假设当前数字是 N 进制,那么: 
对于整数部分,从右往左看,第 i 位的位权等Ni-1
 对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N-j
假设二进制数为100110,那么它转换为十进制的过程为:
1×25+0×24+0×23+1×22+1×21+0×20=38
八进制,十六进制的操作同样如此,只不过要把N的值改成8获16,然后再乘对应哪个位置上的数,求和即为要求的十进制数。

二、十进制转换为二进制八进制十六进制

1 整数部分

十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法:
① 将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数; 
② 保留余数,用商继续除以 N,又得到一个新的商和余数; 
③ 仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;
④ …… 
⑤ 如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。
⑥把先得到的余数作为 N 进制数的低位数字,后得到的余数作为 N 进制数的高位数字,依次排列起 来,就得到了 N 进制数字
例如:
234转换为二进制数的过程
234/2=117……0
117/2=58……1
58/2=29……0
29/2=14……1
14/2=7……0
7/2=3……1
3/2=1……1
1/2=0……1
结果为11101010
其他进制整数部分也是这样操作

2 小数部分

十进制小数转换成 N 进制小数采用“乘 N 取整,顺序排列”法。具体做法是
① 用 N 乘以十进制小数,可以得到一个积,这个积包含了整数部分和小数部分; 
② 将积的整数部分取出,再用 N 乘以余下的小数部分,又得到一个新的积; 
③再将积的整数部分取出,继续用 N 乘以余下的小数部分;
④ …… 
⑤ 如此反复进行,每次都取出整数部分,用 N 接着乘以小数部分,直到积中的小数部分为 0,或者达到所要求 的精度为止。

⑥把取出的整数部分按顺序排列起来,先取出的整数作为 N 进制小数的高位数字,后取出的整数作为低位数字,这 样就得到了 N 进制小数
如把0.6875转换为二进制
0.68752=1.3750 取1
0.375
2=0.750 取0
0.752=1.50 取1
0.5
2=1.0 取1
结果为0.1011
如果一个数字既包含了整数部分又包含了小数部分,那么将整数部分和小数部分开,分别按照上面的方法完成转换, 然后再合并在一起即可。
例如: 
十进制数字 36926.930908203125 转换成八进制的结果为 110076.7345; 
十进制数字 42.6875 转换成二进制的结果为 101010.1011

三、 二进制、八进制和十六进制的转换

1、二进制整数和八进制整数之间的转换

二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行, 高位不足三位用零补齐

2、二进制整数和十六进制整数之间的转换

二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次 进行,高位不足四位用零补齐

对应关系可参考在这里插入图片描述
二进制、八进制和十六进制的整数转换一般够用,若有小数,也可先转换为十进制,再转换为对应进制

若有不足,请多担待

发布了6 篇原创文章 · 获赞 5 · 访问量 38

猜你喜欢

转载自blog.csdn.net/qq_45930294/article/details/105549669
今日推荐