C 语言进制之间的转换

作者:lqh 时间:2021-06-17 07:19:31 

二进制、八进制和十六进制向十进制转换都是非常容易的,就是“按权相加”。

所谓“权”,也即“位权”。例如,十进制第1位的位权为100=1,第2位的位权为101=10,第3位的位权为102=100;而二进制第1位的位权为20=1,第2位的位权为21=2,第3位的位权为22=4。设数字所采用的进制为N(基数也是N),那么第 i 位的位权为 N(i-1)

不同进制转换为十进制举例:

二进制:1001 = 1×23 + 0×22+ 0×21 + 1×20 = 8 + 0 + 0 + 1 = 9

二进制:101.1001 = 1×22 + 0×21+ 1×20+ 1×2-1+ 0×2-2 + 0×2-3 + 1×2-4= 4 + 0 + 1 + 0.5 + 0 + 0 + 0.0625 = 5.5625

八进制:0302 = 3×82 + 0×81+ 2×80 = 192 + 0 + 2 = 194

八进制:0302.46 = 3×82 + 0×81 + 2×80 + 4×8-1 + 6×8-2 = 192 + 0 + 2 + 0.5 + 0.09375= 194.59375

十六进制:0Xea7 = 14×162 + 10×161 + 7×160= 3751

十进制转换为二进制——辗除法

上节的表格中给出了简单的十进制和二进制的转换关系,要想获得更多的转换关系,可以使用辗除法。辗除法也就是“除模取余”法。除模取余就是将一个几进制的数转化成另一个进制时, 另一个进制的基数就是模,用将要转化的进制数除以模,取它的余数。

下图以十进制的“19”转换为二进制为例进行讲解:

C 语言进制之间的转换

如图所示,以2为除数,一直相除下去,直到商为0,余数则为求得的二进制数。

注意:余数要倒序排列,也就是说,最先求得的余数排在二进制的最后面,最后求得的余数排在二进制的最前面。上面的例子中,最后求得的二进制数为 10011。

虽然其他进制也可以按照辗除法来转换,但是比较麻烦,下面介绍更简单的方法。

二进制和八进制的转换

二进制向八进制的转换是每三位二进制数转换为一位八进制数,运算的顺序是从低位向高位依次进行,高位不足三位用零补充。以二进制“1011101”为例,如下图所示:

C 语言进制之间的转换

转换的结果为:1011101 = 0135

八进制向二进制转换的思路是八进制的一位转换为二进制的三位,运算的顺序是从低位向高位依次进行。同样以八进制“0135”为例,如下图所示:

C 语言进制之间的转换

转换的结果为:0135 = 1011101

二进制和十六进制的转换

二进制向十六进制转换时,四位转换成十六进制的一位,运算的顺序是从低位向高位依次进行,高位不足四位用零补。以“1110011”转换成十六进制为例,如下图所示:

C 语言进制之间的转换

转换的结果为:1001011101 = 0X25D

十六进制向二进制转换,就是把十六进制的一位转换成二进制的四位,注意运算的顺序是从低位向高位依次进行。同样以十六进制“0X25D”为例,如下图所示:

C 语言进制之间的转换

标签:C语言,进制转换
0
投稿

猜你喜欢

  • 全面解析java final关键字

    2023-03-16 03:04:55
  • Java+Swing实现五子棋游戏的示例代码

    2022-06-27 11:56:22
  • Java 中HttpURLConnection附件上传的实例详解

    2022-05-26 13:54:39
  • 一文搞懂C++中的运算符重载

    2021-08-02 02:47:53
  • 利用C#实现SSLSocket加密通讯的方法详解

    2023-03-01 02:23:05
  • Mybatis的详细使用教程

    2022-02-15 21:08:20
  • mybatis foreach遍历LIST读到数据为null的问题

    2021-05-24 20:15:27
  • java接口自动化测试框架及断言详解

    2022-01-23 20:01:36
  • eclipse+maven+spring mvc项目基本搭建过程

    2022-12-18 03:50:52
  • c#实现flv解析详解示例

    2022-06-10 22:57:21
  • Java应用EasyExcel工具类

    2023-07-07 18:45:32
  • Android检测手机多点触摸点数的方法

    2023-03-10 11:08:35
  • C#画笔Pen绘制自定义线的帽子

    2022-01-09 20:33:55
  • Java原子操作CAS原理解析

    2021-10-20 01:07:05
  • C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】

    2022-09-14 20:41:14
  • Java Socket实现多线程通信功能示例

    2022-11-29 03:24:59
  • 为什么不建议使用Java自定义Object作为HashMap的key

    2021-09-21 06:15:05
  • C#中判断某类型是否可以进行隐式类型转换

    2023-03-28 15:29:36
  • 详解Docker学习笔记之搭建一个JAVA Tomcat运行环境

    2022-09-03 02:26:06
  • java调用Restful接口的三种方法

    2021-09-07 16:49:04
  • asp之家 软件编程 m.aspxhome.com