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×22 +b×21+c×20
假设有一个八进制数 abc,它可以被展开为:abc = a×82 +b×81+c×80
假设有一个十六进制数 abc,它可以被展开为:abc = a×162 +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)8 -> (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)最后,逆序打印数组中的元素,因为这些元素代表从最低有效位到最高有效位的二进制数。

浙公网安备 33010602011771号