20.进制转化【郝斌C语言入门学习】

1.进制的概念

(1)什么叫进制

  进制就是逢几进一

  我们说N进制实际就是指逢N进一

(2)我们计算机只识别二进制

(3)人类最习惯使用十进制 人有十个指头,方便计数

(4)C语言规定八进制前要加0,十六进制前要加0x或0X,十进制前什么都不加。

2.进制转换

  (1)十进制转其它进制

  1)方法:除r取余,直至商0,余数倒序排列

  练习:十进制的1000转化成16进制 3E8

     十进制的123转化成2进制   1111011

     十进制的123转化成8进制   173

  (2)其它进制转换成十进制

  1)方法;加权展开是一种将数字表示成加权数位和的形式的方法。对于不同进制的数字,其每一位的值都是该位上的数字乘以该位的权重

  2)实例:加权展开

      假设有一个十进制数 abc,它可以被展开为:abc = a×102 +b×101+c×100

    假设有一个2进制数 abc,它可以被展开为:abc = a×2+b×21+c×20

    假设有一个八进制数 abc,它可以被展开为:abc = a×8+b×81+c×80

    假设有一个十六进制数 abc,它可以被展开为:abc = a×16+b×161+c×160

  总结:加权展开的方法适用于任何基数的数字系统,它是一种将数字分解为其数位值和它们相应权重乘积之和的方法。

  (2)二进制转十六进制

    方法:从右向左,四位一段,分别转化,不够四位的补零

    例如:(0101110)2->(0010,1110)2 结果是:(2E)16

       (11010)2 ->(0001, 1010)2 结果是: (1A)16

  (3)十六进制转二进制

    方法:将每一个十六进制位转化成为四个二进制位

    例如:(2E)16 -> (0010 1110)2

       (A1)16 -> (1010 0001)2

 

 

 

         (D2c)16 -> (1101 0010 1100)2

   (4)二进制转八进制

    方法:从右向左,三位一段,分别转化,不够三位的补零

    例如:(00011000)2 -> (000 011 000)8  结果是:(30)8

  (5)八进制转二进制

    方法:将每一个八进制位转化成为三个二进制位

    例如:(30)-> (011 000)2

  (6)十六进制与八进制的转换

    不存在十六进制与八进制的直接相互转化,都是以二进制为中间进制来进行转化的。

 

3.十进制转换成r进制的程序

例题1:

 

 1 # include <stdio.h>
 2 int main(void)
 3 {
 4     int m = 123;
 5     int binaryNum[32];
 6     int i = 0;
 7     int j;
 8     //将整数转换成二进制
 9     while (m)
10     {
11         //存储余数到数组
12         binaryNum[i] = m % 2;
13         m = m / 2;
14         i++;
15     }
16     //输出二进制数
17     printf("二进制数:");
18     for (j=i-1; j>=0; j--)
19     {
20         printf("%d", binaryNum[j]);
21     }
22     printf("\n");    
23     return 0;
24 }
25 /*
26     在vc++6.0中的输出结果:二进制数:1111011
27 */

 

例题2:

 

 1 # include <stdio.h>
 2 void decToBinary(int );//函数声明
 3 int main(void)
 4 {
 5     int decimal;
 6     printf("请输入一个十进制数:");
 7     scanf("%d", &decimal);
 8     decToBinary(decimal);
 9     return 0;
10 }
11 void decToBinary(int n)
12 {
13     //定义一个数组来存储二进制数,最大长度取决于n数的大小
14     int binaryNum[32];
15     int i = 0;
16     int j;
17     //将整数转换成二进制
18     while (n)
19     {
20         //存储余数到数组
21         binaryNum[i] = n % 2;
22         n = n / 2;
23         i++;
24     }
25     //输出二进制数
26     printf("二进制数:");
27     for (j=i-1; j>=0; j--)
28     {
29         printf("%d", binaryNum[j]);
30     }
31     printf("\n");    
32 }
33 /*
34     在vc++6.0中的输出结果:二进制数:1111011
35 */

 

总结:(1)decToBinary 函数接收一个十进制整数 n 作为参数。

   (2)在函数内部,使用一个循环来将十进制数除以2,并存储余数(这将形成二进制数的各个位)。

   (3)循环继续,直到 n 变为0。

   (4)最后,逆序打印数组中的元素,因为这些元素代表从最低有效位到最高有效位的二进制数。

 

posted @ 2024-08-21 08:24  java帝国  阅读(45)  评论(0)    收藏  举报