C语言基础之八/十六进制和进制的转换

    作者:课课家教育更新于: 2016-11-28 17:26:45

    大神带你学编程,欢迎选课

      C语言是作为一门通用计算机编程语言,应用广泛,其设计的目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。众所周知,在编程中除了使用二进制也会经常使用到八进制和十六进制。在深入学习C语言之前课课家笔者先给大家介绍八进制、十六进制的概念以及进制之间的转换步骤。

      ◎八进制概念

      八进制,英文为Octal,缩写OCT或O,一种以8为基数的计算法。在八进制中有0~7共8个数字,其基数为8,逢八进一,借一当八。

      八进制Example: 3072 = 3×83 + 0×82 + 7×81 + 2×80 = 1536 + 0 + 56 + 2 = 1594

      ◎十六进制概念

      十六进制,英文为Hexadecimal,它由0-9,A-F组成,字母不区分大小写。与十进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。具体为用A来表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有0~F共16个数字,基数为16,逢16进1,借1当16。

      十六进制Example:  E3F9 = 14×163 + 3×162 + 15×161 + 9×160 = 57344 + 768 + 240 + 9 = 58361

      下表为二进制、八进制、十进制和十六进制之间的对应关系。

    二进制、八进制、十进制、十六进制的对应关系
    十进制二进制八进制十六进制十进制二进制八进制十六进制
    0 0 0 0 10 1010 12 A
    1 1 1 1 11 1011 13 B
    2 10 2 2 12 1100 14 C
    3 11 3 3 13 1101 15 D
    4 100 4 4 14 1110 16 E
    5 101 5 5 15 1111 17 F
    6 110 6 6 16 10000 20 10
    7 111 7 7 17 10001 21 11
    8 1000 10 8 18 10010 22 12
    9 1001 11 9 19 10011 23 13


      PS:在C语言中,八进制通常以“0”开头(注意是数字0不是字母o),举个例子,比如 0307;十六进制通常以“0x”或“0X”开头(不区分大小写),举个例子,比如 0xE27 或 0X89F。

      说完概念那么接下来我们就说说具体的实例应用,下面是八进制和十六进制加法运算的两个例子。

      ①八进制加法:0107 + 0274 = 0403

    八进制加法:0107 + 0274 = 0403
    图1

      ②十六进制加法:0XA2B + 0X276 = 0XCA1

    十六进制加法:0XA2B + 0X276 = 0XCA1
    图2
      接下来我们来说说进制之间的转换。

      ◎其他进制向十进制的转换

      二进制、八进制和十六进制向十进制转换通常是按照“按权相加”的原则来进行转换。

      在这里先给大家解释下何谓“按权相加”,这里所指的“权”就是“位权”的意思,比如十进制第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×2+ 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”转换为二进制为例子进行介绍。

    十进制转换为二进制
    图3

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

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

      ◎二进制和八进制的转换

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

     
    二进制和八进制的转换
    图4

      二进制转换八进制的例子转换的结果为:1011101 = 0135

      倒推来想,八进制向二进制转换的思路就是八进制的一位转换为二进制的三位,运算的顺序是从低位向高位依次进行。下面笔者以八进制“0135”为例子,具体如图5所示。
     
    二进制和八进制的转换
    图5

      八进制转换为二进制的例子转换的结果为:0135 = 1011101

      ◎二进制和十六进制的转换

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

     
    二进制和十六进制的转换
    图6

      二进制转换为十六进制的转换的结果为:1001011101 = 0X25D

      倒推来想,十六进制向二进制转换,就是把十六进制的一位转换成二进制的四位,注意运算的顺序是从低位向高位依次进行。同样笔者以十六进制“0X25D”为例子,具体如图7所示。
     
    二进制和十六进制的转换
    图7
      十六进制转换为二进制的转换的结果为:0X25D = 001001011101
      
      本次C语言基础之八/十六进制和进制的转换的基础教程笔者主要给大家介绍饿了八进制、十六进制的基本概念以及进制之间的转换概念例子,比较难理解的地方就是进制之间的转换关系,开始学习的时候这是比较大的一个门槛,不过笔者觉得只要把基本概念和转换表记熟,进制之间的转换也就迎刃而解了。

课课家教育

未登录

1