网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 461|回复: 0
打印 上一主题 下一主题

【C语言】进制转换:十进制转换为X进制

[复制链接]

689

主题

696

帖子

3112

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3112
跳转到指定楼层
楼主
发表于 2023-11-1 20:32:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
将十进制转换为二进制、八进制、十六进制将十进制转换为其它进制时比较复杂,整数部分和小数部分的算法不一样,下面我们分别讲解。1) 整数部分十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法。具体做法是:
  • 将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数;
  • 保留余数,用商继续除以 N,又得到一个新的商和余数;
  • 仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;
  • ……
  • 如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。

把先得到的余数作为 N 进制数的低位数字,后得到的余数作为 N 进制数的高位数字,依次排列起来,就得到了 N 进制数字。

下图演示了将十进制数字 36926 转换成八进制的过程:


从图中得知,十进制数字 36926 转换成八进制的结果为 110076。

下图演示了将十进制数字 42 转换成二进制的过程:


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

把取出的整数部分按顺序排列起来,先取出的整数作为 N 进制小数的高位数字,后取出的整数作为低位数字,这样就得到了 N 进制小数。

下图演示了将十进制小数 0.930908203125 转换成八进制小数的过程:


从图中得知,十进制小数 0.930908203125 转换成八进制小数的结果为 0.7345。

下图演示了将十进制小数 0.6875 转换成二进制小数的过程:


从图中得知,十进制小数 0.6875 转换成二进制小数的结果为 0.1011。

如果一个数字既包含了整数部分又包含了小数部分,那么将整数部分和小数部分开,分别按照上面的方法完成转换,然后再合并在一起即可。例如:
  • 十进制数字 36926.930908203125 转换成八进制的结果为 110076.7345;
  • 十进制数字 42.6875 转换成二进制的结果为 101010.1011。

下表列出了前 17 个十进制整数与二进制、八进制、十六进制的对应关系:
十进制012345678910111213141516
二进制0110111001011101111000100110101011110011011110111110000
八进制01234567101112131415161720
十六进制0123456789ABCDEF10

注意,十进制小数转换成其他进制小数时,结果有可能是一个无限位的小数。请看下面的例子:
  • 十进制 0.51 对应的二进制为 0.100000101000111101011100001010001111010111...,是一个循环小数;
  • 十进制 0.72 对应的二进制为 0.1011100001010001111010111000010100011110...,是一个循环小数;
  • 十进制 0.625 对应的二进制为 0.101,是一个有限小数。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-25 22:05 , Processed in 0.035160 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表