`
fackyou200
  • 浏览: 312663 次
  • 性别: Icon_minigender_1
  • 来自: 山西太原
社区版块
存档分类
最新评论

c语言中的进制转换

 
阅读更多

1.2  进位计数制及其转换

计算机能够处理数值、文字、声音、图像等信息。读者也许会问:为什么作为电子设备的计算机能处理那么多复杂的信息呢?实际上,当把这些信息转换成计算机能识别的形式就能进行处理。目前计算机中所有的信息都用“0”和“1”两个数字符号组合的二进制数来表示。

数值、图形、文字等各种形式的信息,需要计算机加工处理时,首先必须按一定的法则转换成二进制数。本节将首先以常用的十进制为出发点,来讨论二进制、八进制及十六进制的特点,然后介绍各种进制数之间的转换方法。

1.2.1  十进制数的表示

进位计数制是一种计数的方法,习惯上最常用的是十进制计数法。十进制数的每位数可以用下列10个数码之一来表示:0123456789。十进制数的基数为10,基数表示进位制所具有的数码的个数。

十进制数的计数规则是“逢十进一”,也就是说,每位累计不能超过9,计满10就应向高位进1

一般来讲,任意一个十进制数N,可以用位置计数法表示如下:

()10 = (an–1an–2a1a0.a–1a–2am)10

也可以用按权展开式表示如下:

        ()10 an–1 × 10n–1 + an–2 × 10n–2  + a1 × 10 + a0 × 100

                        + a–1 × 10–1 + a–2 × 10–2  + am × 10m

                       =

式中,ai表示各个数字符号为0910个数码中的任意一个;n为整数部分的位数,m为小数部分的位数;10i为该位数字的权。例如:

(1234.56)10 = 1 × 103 + 2 × 102 + 3 × 101 + 4 × 100 + 5 × 10–1 + 6 × 10–2

通常,对十进制数的表示,可以在数字的右下角标注10D

1.2.2  二进制数、八进制数和十六进制数的表示

计算机中为了便于存储及计算的物理实现,采用了二进制。二进制数的基数为2,只有01两个数码,其计数规则是“逢二进一”,即每位计满2就向高位进1。它的各位的权是以2i表示的。

对于任意一个二进制数N,用位置计数法表示为:

()2 = (an–1an–2a1a0.a–1a–2am)2

用按权展开式表示为:

          ?()an–1 × 2n–1 + an–2 × 2n–2  + a1 × 2 + a0 × 20

                          ??+ a–1 × 2–1  + a–2 × 2–2  + am × 2m

                          =

式中,ai表示各个数字符号为01这两个数码中的任意一个;n为整数部分的位数,m为小数部分的位数;2i为该位数字的权。例如:

(101101)2 = 1 × 25 + 0 × 24 + 1 × 23 + 1 × 22 + 0 × 21 + 1 × 2= (45)10

通常,对二进制数的表示,可以在数字的右下角标注2B

二进制数运算规则简单,便于电路实现,它是数字系统中广泛采用的一种数制。但因二进制表示一个数时,所用的位数比用十进制数表示的位数多,人们读写很不方便,容易出错。因此常采用八进制或十六进制。C语言程序设计中就经常会用到这两种进制。

八进制数的基数是8,采用的数码是01234567。计数规则是“逢八进一”,它的各位的权是以8i表示的。通常,对八进制数的表示,可以在数字的右下角标注8O,但在C语言中是在数的前面加数字0来表示。例如,(1234)8就是表示一个八进制数,而不是十进制数1234,在C语言中它表示为01234

十六进制数的基数是16,采用的数码是0123456789ABCDEF。其中ABCDEF分别表示十进制数字101112131415。十六进制的计数规则是“逢十六进一”,它的各位的权是以16i表示的。通常,对十六进制数的表示,可以在数字的右下角标注16H,但在C语言中是在数的前面加数字0和字母X0X来表示。例如,(12AF)16就是表示一个十六进制数,在C语言中它表示为0X12AF

由此可得出:十进制、八进制、二进制与十六进制的特征对照表如表1-1所示。

1-1  二进制、八进制、十进制与十六进制的特征对照表

    

    

   

数的表示法

十进制

0123456789

逢十进一

(1234)10

二进制

01

逢二进一

(1101)2

八进制

01234567

逢八进一

(4567)8

十六进制

09ABCDEF

逢十六进一

(45AF)16

1.2.3  二进制数和十进制数的转换

1.二进制转换为十进制数

二进制数转换成十进制数是很方便的,只要将二进制数写成按权展开式,并将式中各乘积项的积计算出来,然后各项相加,即可得到与该二进制数相对应的十进制数。例如

(11010.101)2 = 1 × 24 + 1 × 23 + 0 × 22 + 1 × 21 + 0 × 20

                    ??+ 1 × 2–1  + 0 × 2–2 + 1 × 2–3

                   = 16 + 8 + 2 + 0.5 + 0.125

                   =(26.625)10

2.十进制转换二进制数

十进制数转换成二进制数分成整数部分转换和小数部分转换,下面分别来介绍它们转换的方法。

1)整数部分转换

把要转换的十进制数的整数部分不断除以基数2,并记下余数,直到商为0为止。

【例1-1 ()10 = (117)10

117 / 2  = 58      a0 = 1  最低整数位

58 / 2  = 29    a1 = 0

29 / 2  = 14           a2 = 1

14 / 2  = 7            a3 = 0

7 / 2   = 3            a4 = 1

3 / 2   = 1            a5 = 1

1 / 2   = 0            a6 = 1  最高整数位

所以  ()10 = (1110101)2

注意:对于整数部分的转换第一次除以2所得到的余数是二进制数整数的最低位,最后所得到的余数是二进制数整数的最高位。

2)小数部分转换

对于被转换的十进制数的小数部分则应不断乘以基数2,并记下其整数部分,直到结果的小数部分为0为止。

【例1-2 ()10 = (0.8125)10

0.8125 × 2  = 1.625   b1 = 1  最高小数位

0.625 × 2   = 1.25      b2 = 1

0.25 × 2    = 0.5       b3 = 0

0.5 × 2     = 1.0       b4 = 1  最低小数位

所以  ()10 = (0.1101)2

注意:对于小数部分的转换式中的整数不参加连乘,第一次乘以2所得到的整数部分是二进制数小数的最高位,最后所得到的整数部分是二进制数小数的最低位。

在十进制的小数部分转换中,有时连续乘以2不一定能使小数部分等于0,这说明该十进制小数不能用有限位二进制小数表示。这时,只要取足够多的位数,使其误差达到所要求的精度就可以了。

十进制数转换成二进制数的这种方法其实也适用于十进制数转换成其他进制的数,只是基数不再是2,而是要转换的进制数的基数。下面的例子是将一个十进制数转换成八进制数。

【例1-3 ()10 = (117)10

117 / 8 = 14      a0 = 5  最低整数位

14 / 8  = 1     a1 = 6

1 / 8   = 0     a2 = 1  最高整数位

所以  ()10 = (165)8

【例1-4 ()10 = (0.8125)10

0.8125 × 8 = 6.5      b1 = 6  最高小数位

0.5 × 8   = 4.0      b2 = 4  最低小数位

所以  ()10 = (0.64)8

1.2.4  二进制数、八进制数和十六进制数的转换

八进制数的基数是88 = 23),十六进制数的基数是1616 = 24)。二进制数、八进制数和十六进制数之间具有2的整指数倍的关系,因而可直接进行转换。

1.二进制数  八进制数

从小数点开始,分别向左、右按3位分组转换成对应的八进制数字字符,最后不满3位的,则需补0

【例1-5 将二进制数(1101101.10101)2转换成八进制数。

具体方法为:

二进制数:

0 0 1

1 0 1

1 0 1

.

1 0 1

0 1 0

 

 

八进制数:

1

5

5

.

5

2

所以  (1101101.10101)2 = (155.52)8

2.八进制数  二进制数

将每位八进制数用3位二进制数表示即可。

【例1-6 将八进制数(345.64)8转换成二进制数。

具体方法为:

八进制数:

3

4

5

.

6

4

 

 

二进制数:

011

110

101

.

110

100

所以  (345.64)8 = (11100101.1101)2

3.二进制数  十六进制数

从小数点开始,分别向左、右按4位分组转换成对应的十六进制数字字符,最后不满4位的,则需补0

【例1-7 将二进制数(1101101.10101)2转换成十六进制数。

具体方法为:

二进制数:

0 1 1 0

1 1 0 1

.

1 0 1 0

1 0 0 0

 

 

十六进制数:

6

D

.

A

8

所以  (1101101.10101)2 = (6D.A8)16

4.十六进制数  二进制数

将每位十六进制数用4位二进制表示即可。

【例1-8 将十六进制数(A8D.6C)16转换成二进制数。

具体方法为:

十六进制数:

A

8

D

.

6

C

 

 

二进制数:

1010

1000

1101

.

0110

1100

所以  (A8D.6C)16 = (101010001101.011011)2
分享到:
评论

相关推荐

    C语言中进制转换的编程方法.pdf

    C语言中进制转换的编程方法 C语言中进制转换是指将一种进制的数值转换为另一种进制的数值的过程。在计算机编程中,进制转换是一种非常重要的技术,广泛应用于数据处理、计算机网络、数据库等领域。下面是C语言中...

    C语言实现进制转换函数的实例详解

    在本文中,我们将详细介绍C语言实现进制转换函数的实例详解,包括二进制、八进制、十六进制转换为十进制的函数实现。 进制转换函数的实现 ------------------- 在C语言中,实现进制转换函数需要两个参数:要转换的...

    C语言16进制转换浮点数

    计算机通讯协议中,会遇到返回信息中,4个整型数字组合代表一个浮点数,本案例是通过位运算将4个整型组合转化成浮点数。

    C语言进制转换,十进制转16进制

    在编程领域,进制转换是一项基础且重要的技能,特别是在C语言中。C语言不内置直接进行进制转换的函数,因此程序员需要通过自定义函数来完成。本篇将深入探讨如何在C语言中实现十进制到十六进制的转换。 首先,我们...

    c语言十进制到任何进制的转换

    知识点4:c语言中的进制转换 c语言中提供了多种方式来实现十进制到任意进制的转换,包括使用 pow 函数、使用数组、使用循环等方式。在这些实现中,我们需要掌握核心语句的编写,例如使用 pow 函数来计算出相应的 a ...

    C语言进制转换器源代码

    C语言进制转换器源代码

    C语言,实现进制转换,十进制转换为十六进制

    C语言,实现进制转换,十进制转换为十六进制 例如输入10,转换结果为a

    C语言各进制转换代码参考

    ### C语言进制转换概览 在C语言中,进行不同进制之间的转换是一种常见的需求,特别是在处理二进制数据、网络通信协议解析或低级系统编程时。进制转换主要包括将十进制转换为其他进制(如二进制、八进制、十六进制)...

    C语言二进制字符串与十六进制字符串相互转化

    本文将深入探讨如何在C语言环境中实现二进制字符串与十六进制字符串之间的转换,并结合MFC(Microsoft Foundation Classes)框架创建一个小工具来辅助这些操作。 首先,让我们理解二进制和十六进制的基本概念。二...

    c语言 十进制转换为二进制

    在编程领域,进制转换是一项基础且重要的技能。在C语言中,我们经常需要将不同进制的数相互转换,特别是在计算机科学的基础学习和实际应用中。本篇将重点讲解如何利用C语言将十进制数转换为二进制数。 首先,我们...

    C语言写的进制转换系统

    在IT领域,编程语言是构建各种软件和...通过这个项目,开发者可以深入理解数值解析、进制转换逻辑以及如何在C语言中构建用户交互界面。对于初学者来说,这是一个极好的学习资源,有助于提升编程技能和解决问题的能力。

    C语言 十进制转换成二进制

    // 函数声明:递归方式将十进制转换为二进制 void f(int n); int main() { int n; while (1) { scanf("%d", &n); if (n ) break; // 如果输入负数,则结束循环 if (n == 0) printf("0"); // 特殊处理0的情况 ...

    进制转换C源码

    此外,字符串处理也是进制转换中常见的部分,如处理前导零、检查非法字符等。 总结来说,C语言实现进制转换虽然相比Java需要更多的手动操作,但它提供了更底层的控制,适合于理解和学习进制转换的内部机制。通过对...

    C语言实现十进制转换成二八十六进制

    C语言实现十进制转换成二八十六进制的转换,代码已经经过调试可以使用,放心下载!

    C语言进制转换C语言进制转换.doc

    C语言进制转换C语言进制转换

    C语言编写进制转换器

    本项目“C语言编写进制转换器”旨在帮助开发者掌握这一技能,并能实际应用到自己的代码中。下面将详细讲解C语言中的进制转换原理以及如何编写这样的转换器。 首先,我们来了解一下进制的概念。进制是表示数字的系统...

    c语言 二进制 十进制 快速转换

    二进制转换为十六进制时,我们把二进制数按每四位一组划分,然后将每一组转换成对应的十六进制数。例如,二进制数"00110101"转换为十六进制,高四位"0011"对应十进制的3,低四位"0101"对应十进制的5,所以十六进制...

    c语言的进制转换问题

    进制转换其实很简单,只要掌握一定的方法,可以让你轻松解决。

    C语言二进制转换成八进制或十六进制

    C语言实现二进制向八进制和十六进制转换 二进制转换成十进制 再将十进制转换成R进制

Global site tag (gtag.js) - Google Analytics