二进制,八进制,十进制,十六进制互相转化的C语言源代码
- 格式:doc
- 大小:54.00 KB
- 文档页数:16
⼆进制,⼗进制,⼋进制,⼗六进制之间的转换计算机内部只有⼆进制,包括字符数据等int i = 15; //00000000 00000000 00000000 00001111 ==> 1字节= 8位1Byte = 8 bitint 有4个字节,即32位char c = 'a'; //00000000 01000001计算机内部使⽤的⼆进制位都是补码的形式(此处⽤1个字节表⽰)15:原码00001111 ==>补码 00001111整数的原码和补码相同-15:15的原码 ==>反码+1 ==> 补码原码00001111 ==> 反码11110000 +1 ==>补码 11110001如果⽤2个字节表⽰-15的反码原码00000000 00001111反码11111111 11110001如果⽤3个字节表⽰-15的反码原码00000000 00000000 00001111反码11111111 11111111 11110001以此类推可以⽤System.out.println(Integer.toBinaryString(a));打印验证int i=-1;//11111111 11111111 11111111 11111111int i = -2147483648(int中最⼩的负数)//100000000 00000000 00000000 00000000⼗进制是⼈类的习惯计算机在输出时候根据⼈类习惯输出10进制赋值的时候默认是赋值10进制计算机默认接受10进制,⾃动转换为⼆进制数据16进制是⼆进制的简写⽅便⼈类书写和记忆0xff -> 11111111转换int x = 020;//⼋进制 0开头⼋进制==>⼗进制020==>2*8+00120 ==> 1*8^2 + 2*8^1 + 001234 --> 1*8^3 + 2*8^2 + 3*8 +4x = 0x2E;//⼗六进制 0x开头⼗六进制 ==>⼗进制x=0x2E; ==> 2*16^1 + e =46x= 0x1234 ==> 1*16^3 + 2*16^2 + 3*16 + 4⼆进制 ==> ⼗进制0000 1111 ==> 1*2^3 + 1*2^2 + 1*2 + 1 =150100 1001 ==> 1*2^6 + 1*2^3+1 =⼗进制 ==>⼆进制1)除⼆取余28/2 14/2 7/2 3/2 1/2 00 0 1 1 1 0 ==>倒序1 110037/2 18/2 9/2 4/2 2/21 0 1 0 1 ==>倒序(如果需要则前⾯补0) 0001 01012)对应权重 (简化算法)int x =37;32 + 4 +10010 0101 // 128 64 32 16 8 4 2 10 0 1 0 0 1 0 1998998 - 512 = 486 - 256 = 230 -128 = 102 - 64 = 38 -32 =6-4 =2-2 =01111100110 //512 256 128 64 32 16 8 4 2 11 1 1 1 1 0 0 1 1 0⼋进制 ==> ⼆进制int x = 01234;⽤三个⼆进制位表⽰⼀个⼋进制位000 001 010 011 100⼗六进制 ==> ⼆进制int x = 0x1234; ⽤4个⼆进制表⽰⼀个16进制位0001 0010 0011 01000x12345678==>0001 0010 0011 0100 0101 0110 0111 1000⼆进制 ==> 16进制0000 0111 1111 1110 ==> 0x07FE;⼀般⽤16进制表⽰⼆进制例x = 0x7FE ;//0000 0111 1111 1110,直接赋值则以为是⼋进制(因为以0开头)。
二进制,八进制,十进制,十六进制之间的转换算法一、十进制与二进制之间的转换(1)十进制转换为二进制,分为整数部分和小数部分①整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。
下面举例:例:将十进制的168转换为二进制得出结果将十进制的168转换为二进制,(10101000)2分析:第一步,将168除以2,商84,余数为0。
第二步,将商84除以2,商42余数为0。
第三步,将商42除以2,商21余数为0。
第四步,将商21除以2,商10余数为1。
第五步,将商10除以2,商5余数为0。
第六步,将商5除以2,商2余数为1。
第七步,将商2除以2,商1余数为0。
第八步,将商1除以2,商0余数为1。
第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000(2)小数部分方法:乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。
如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。
换句话说就是0舍1入。
读数要从前面的整数读到后面的整数,下面举例:例1:将0.125换算为二进制得出结果:将0.125换算为二进制(0.001)2分析:第一步,将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25;第二步, 将小数部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5;第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0;第四步,读数,从第一位读起,读到最后一位,即为0.001。
例2,将0.45转换为二进制(保留到小数点第四位)大家从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。
转换进制程序C语⾔,C语⾔各进制转换源代码#include#include#includevoid ten_two(int);void ten_eight(int);void ten_sixten(int);void two_ten(int);void two_eight(int);void two_sixten(int);void eight_two(int);void eight_ten(int);void eight_sixten(int);void sixten_two(char r[], int k);void sixten_ten(char r[], int k);void sixten_eight(char r[], int k);int main(void){int i, j, number = 0;int temp;char change[10];printf("=============================================================\n");printf(" 欢 迎 使 ⽤ 进 制 转 换 程 序 \n");printf(" 作 者:李 研 时 间:2009 年7 ⽉5 ⽇ \n");printf("=============================================================\n");do{temp = 0;//fflush(stdin);printf("\n请选择转换前的进制:\n2⼆进制\n8⼋进制\n10⼗进\n16⼗六进制\n0退出\n");printf("转换前的进制是:");scanf("%d", &i);case 2:printf("\n请选择转换后的进制:\n2⼆进制\n8⼋进制\n10⼗进\n16⼗六进制\n0退出\n"); printf("转换后的进制是:");scanf("%d", &j);switch(j){case 2:printf("\n同进制之间不⽤转化!\n");temp = 1;break;case 8:printf("\n请输⼊您想要转化的数:");scanf("%d", &number);two_eight(number);temp = 1;break;case 10:printf("\n请输⼊您想要转化的数:");scanf("%d", &number);two_ten(number);temp = 1;break;case 16:printf("\n请输⼊您想要转化的数:");scanf("%d", &number);two_sixten(number);temp = 1;break;case 0:printf("谢谢使⽤!!");}break;printf("转换后的进制是:");scanf("%d", &j);switch(j){case 8:printf("\n同进制之间不⽤转化!\n");temp = 1;break;case 2:printf("\n请输⼊您想要转化的数:");scanf("%d", &number);eight_two(number);temp = 1;break;case 10:printf("\n请输⼊您想要转化的数:");scanf("%d", &number);eight_ten(number);temp = 1;break;case 16:printf("\n请输⼊您想要转化的数:");scanf("%d", &number);eight_sixten(number);temp = 1;break;case 0:printf("谢谢使⽤!!");}break;case 10:printf("\n请选择转换后的进制:\n2⼆进制\n8⼋进制\n10⼗进\n16⼗六进制\n0退出\n");{case 10:printf("\n同进制之间不⽤转化!\n");temp = 1;break;case 2:printf("\n请输⼊您想要转化的数:");scanf("%d", &number);ten_two(number);temp = 1;break;case 8:printf("\n请输⼊您想要转化的数:");scanf("%d", &number);ten_eight(number);temp = 1;break;case 16:printf("\n请输⼊您想要转化的数:");scanf("%d", &number);ten_sixten(number);temp = 1;break;case 0:printf("谢谢使⽤!!");}break;case 16:printf("\n请选择转换后的进制:\n2⼆进制\n8⼋进制\n10⼗进\n16⼗六进制\n0退出\n"); printf("转换后的进制是:");scanf("%d", &j);printf("\n同进制之间不⽤转化!\n"); temp = 1;break;case 2:printf("\n请输⼊您想要转化的数:"); fflush(stdin);gets(change);for(number = 0;; number++){if(change[number] == '\0') break;}sixten_two(change, number);temp = 1;break;case 8:printf("\n请输⼊您想要转化的数:"); fflush(stdin);gets(change);for(number = 0;; number++){if(change[number] == '\0') break;}sixten_eight(change, number); temp = 1;break;case 10:printf("\n请输⼊您想要转化的数:"); fflush(stdin);gets(change);if(change[number] == '\0')break;}sixten_ten(change, number);temp = 1;break;case 0:printf("谢谢使⽤!!");}break;case 0:printf("\n谢谢使⽤!\n");}}while(temp == 1);return 0;}/*以下为: ⼆进制转换为⼗进制,⼋进制,⼗六进制.*/ void two_ten(int a){int i, s = 0;int result = 0;for(i = 1; a != 0; i *= 2){if(a % 10 > 1){s = 1;break;}else{result += (a % 10) * i;}if(s == 1)printf("您的输⼊有误!请重新输⼊\n"); elseprintf("\n转换后的数为:%d\n", result); }void two_eight(int a){int i, j, k, s = 0;int p[30];int result = 0;for(i = 1; a != 0; i *= 2){if(a % 10 > 1){s = 1;break;}else{result += (a % 10) * i;a = a / 10;}}for(j = 0; result != 0; j++){p[j] = result % 8;result = result / 8;}if(s == 1)printf("It is wrong\n");elsefor(k = j - 1; k >= 0; k--) {printf("%d", p[k]);}printf("\n");}}void two_sixten(int a){int i, j, k, s = 0;char p[30];int result = 0;for(i = 1; a != 0; i *= 2){if(a % 10 > 1){s = 1;break;}else{result += (a % 10) * i;a = a / 10;}}for(j = 0; result != 0; j++) {p[j] = result % 16;result = result / 16;if (p[j] > 10){switch(p[j])p[j] = 'A';break;case 11:p[j] = 'B';break;case 12:p[j] = 'C';break;case 13:p[j] = 'D';break;case 14:p[j] = 'E';break;case 15:p[j] = 'F';break;}}else p[j] += 48;}if(s == 1)printf("It is wrong\n"); else{printf("\n转换后的数为:"); for(k = j - 1; k >= 0; k--) {printf("%c", p[k]);}printf("\n");}void eight_two(int a){int i, j, k, s = 0;int result = 0;int p[30];for(i = 1; a != 0; i *= 8){if(a % 10 > 7){s = 1;break;}else{result += (a % 10) * i;a = a / 10;}}for(j = 0; result != 0; j++) {p[j] = result % 2;result = result / 2;}if(s == 1)printf("It is wrong\n"); else{printf("\n转换后的数为:"); for(k = j - 1; k >= 0; k--) {printf("%d", p[k]);}}void eight_ten(int a){int i, s = 0;int result = 0;for(i = 1; a != 0; i *= 8){if(a % 10 > 7){s = 1;break;}else{result += (a % 10) * i;a = a / 10;}}if(s == 1)printf("It is wrong\n");else{printf("\n转换后的数为:%d\n", result); }}void eight_sixten(int a){int i, j, k, s = 0;char p[30];int result = 0;for(i = 1; a != 0; i *= 8){}else{result += (a % 10) * i;a = a / 10;}}for(j = 0; result != 0; j++) {p[j] = result % 16;result = result / 16;if(p[j]p[j] += 48;else{switch(p[j]){case 10:p[j] = 'A';break;case 11:p[j] = 'B';break;case 12:p[j] = 'C';break;case 13:p[j] = 'D';break;case 14:}}}if(s == 1)printf("It is wrong\n");else{printf("\n转换后的数为:");for(k = j - 1; k >= 0; k--){printf("%c", p[k]);}printf("\n");}}/*以下为: ⼗六进制转换为⼗进制,⼆进制,⼋进制.*/ void sixten_ten(char a[], int k){int i, j, s = 0;int result = 0;int b[50];for(i = 0; i{if(a[i] <= '9' && a[i] >= '1'){b[i] = a[i] - 48;}else{case 'B': b[i] = 11; break; case 'C': b[i] = 12; break; case 'D': b[i] = 13; break; case 'E': b[i] = 14; break; case 'F': b[i] = 15; break; case 'a': b[i] = 10; break; case 'b': b[i] = 11; break; case 'c': b[i] = 12; break; case 'd': b[i] = 13; break; case 'e': b[i] = 14;s = 1;}}}for(i = 1, j = k - 1; j >= 0; j--, i *= 16) {result += b[j] * i;}if(s == 1)printf("It is wrong\n");else{printf("\n转换后的数为:%d", result); }}void sixten_two(char a[], int k){int i, j, s = 0;int result = 0;int b[50];int p[30];for(i = 0; i{if(a[i] <= '9' && a[i] >= '1')b[i] = a[i] - 48;else{switch(a[i]){break; case 'C': b[i] = 12; break; case 'D': b[i] = 13; break; case 'E': b[i] = 14; break; case 'F': b[i] = 15; break; case 'a': b[i] = 10; break; case 'b': b[i] = 11; break; case 'c': b[i] = 12; break; case 'd': b[i] = 13; break; case 'e': b[i] = 14; break; case 'f':}}}for(j = k - 1, i = 1; j >= 0; j--, i *= 16) {result += b[j] * i;}for(j = 0; result != 0; j++){p[j] = result % 2;result = result / 2;}if(s == 1)printf("It is wrong\n");else{printf("\n转换后的数为:");for(k = j - 1; k >= 0; k--){printf("%d", p[k]);}printf("\n");}}void sixten_eight(char a[], int k){int i, j, s = 0;int result = 0;int b[30];int p[30];if(a[i] <= '9' && a[i] >= '1') b[i] = a[i] - 48;else{switch(a[i]){case 'A':b[i] = 10;break;case 'B':b[i] = 11;break;case 'C':b[i] = 12;break;case 'D':b[i] = 13;break;case 'E':b[i] = 14;break;case 'F':b[i] = 15;break;case 'a':b[i] = 10;break;case 'b':b[i] = 11;break;case 'c':b[i] = 12;b[i] = 13;break;case 'e':b[i] = 14;break;case 'f':b[i] = 15;break;default:s = 1;}}}for(j = k - 1, i = 1; j >= 0; j--, i *= 16) {result += b[j] * i;}for(j = 0; result != 0; j++){p[j] = result % 8;result = result / 8;}if(s == 1)printf("It is wrong\n");else{printf("\n转换后的数为:");for(k = j - 1; k >= 0; k--){printf("%d", p[k]);}printf("\n");/*以下为: ⼗进制转换为⼆进制,⼋进制,⼗六进制.*/ void ten_two(int a){int j, k;int p[30];for(j = 0; a != 0; j++){p[j] = a % 2;a = a / 2;}printf("\n转换后的数为:");for(k = j - 1; k >= 0; k--){printf("%d", p[k]);}printf("\n");}void ten_eight(int a){int j, k;int p[30];for(j = 0; a != 0; j++){p[j] = a % 8;a = a / 8;}printf("\n转换后的数为:");for(k = j - 1; k >= 0; k--){printf("%d", p[k]);}printf("\n");{int j, k;int p[30];for(j = 0; a != 0; j++) {p[j] = a % 16;a = a / 16;if(p[j]p[j] += 48;else{switch(p[j]){case 10:p[j] = 'A';break;case 11:p[j] = 'B';break;case 12:p[j] = 'C';break;case 13:p[j] = 'D';break;case 14:p[j] = 'E';break;case 15:p[j] = 'F';break;}}}printf("\n转换后的数为:"); for(k = j - 1; k >= 0; k--) {printf("%c", p[k]);}printf("\n");}。
求高手写C语言程序代码:从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数。
求高手写C语言程序代码:"从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数。
"#include<stdio.h>转换为2进制void showbit(int n){if(n>1){showbit(n/2);printf(" ");}printf("%d",n%2);}转换为8进制void showoct(int n){if(n>7){showoct(n/8);printf(" ");}printf("%d",n%8);}转换为16进制void showhex1(int n){switch(n){case 10: putchar('A'); break;case 11: putchar('B'); break; case 12: putchar('C'); break; case 13: putchar('D'); break; case 14: putchar('E'); break; case 15: putchar('F'); break; default: printf("%d",n);}}void showhex(int n){if(n>15){showhex(n/16); showhex1(n%16);}elseshowhex1(n%16);}main(){int a;printf("input a num:"); scanf("%d",&a);printf("二进制: ");showbit(a);printf("\n");printf("八进制: "); showoct(a);printf("\n");printf("十六进制: "); showhex(a);printf("\n");}c语言从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数。
c语言进制转换算法代码c语言的进制转换是研究计算机原理时非常重要的知识,它能够帮助我们更有效更准确的记录信息和处理计算问题。
下面我们就来介绍c语言中进制转换的基本算法代码:一、进制转换的基本步骤1. 确定源进制和目标进制,比如从十进制转换为八进制、十六进制;2. 将源进制数据转换为相应的目标进制数据,比如8进制转换为10进制;3. 将转换后的目标进制数据输出到屏幕或者其他输出设备中。
二、c语言进制转换算法代码1. 八进制转换为十进制:long octalToDecimal(long n){long dec_value = 0; // 十进制数int i = 0;while(n != 0){dec_value += (n%10) * pow(8,i);n = n/10;i++;}return dec_value;}2. 十进制转换为八进制:long DecimalToOctal(long n) {int i=1;long octal_value=0;while (n!=0){octal_value+=(n%8)*i;n/=8;i*=10;}return octal_value;}3. 八进制转换为十六进制:long octalToHexadecimal(long n) {long dec_value = 0; // 十进制数int base = 1;while (n != 0){long temp = n % 10;dec_value += temp * base;n = n / 10;base = base * 8;}// 将十进制数转换为十六进制long rem;long hex_value = 0; // 十六进制数long i = 1;while (dec_value != 0){rem = dec_value % 16;hex_value = hex_value+ rem*i;dec_value = dec_value / 16;i = i * 10;}return hex_value;}4. 十进制转换为十六进制:long DecToHex(long n){long rem,hex=0, i=1;while(n!=0){rem = n % 16;hex = hex + rem * i;n /= 16;i *= 10;}return hex;}总结:以上就是c语言中进制转换的基本算法代码,深入理解这些程序的运行原理,能够帮助我们更深入了解编程的基本原理,也为我们后续c编程奠定更良好的基础。
c++进制转化代码下面是一个示例的 C++ 代码,用于进行不同进制之间的转换:```cpp#include <iostream>using namespace std;// 十进制转二进制string decimalToBinary(int decimal) {string binary = "";while (decimal > 0) {binary += to_string(decimal % 2);decimal /= 2;}return reverse(binary);}// 十进制转八进制string decimalToOctal(int decimal) {string octal = "";while (decimal > 0) {octal += to_string(decimal % 8);decimal /= 8;}return reverse(octal);}// 十进制转十六进制string decimalToHexadecimal(int decimal) {string hexadecimal = "";while (decimal > 0) {if (decimal % 16 < 10) {hexadecimal += to_string(decimal % 16);} else {hexadecimal += char('A' + decimal % 16 - 10);}decimal /= 16;}return reverse(hexadecimal);}// 二进制转十进制int binaryToDecimal(string binary) {int decimal = 0;for (int i = 0; i < binary.size(); i++) {decimal += (binary[i] - '0') * pow(2, binary.size() - 1 - i);}return decimal;}// 八进制转十进制int octalToDecimal(string octal) {int decimal = 0;for (int i = 0; i < octal.size(); i++) {decimal += (octal[i] - '0') * pow(8, octal.size() - 1 - i);}return decimal;}// 十六进制转十进制int hexadecimalToDecimal(string hexadecimal) {int decimal = 0;for (int i = 0; i < hexadecimal.size(); i++) {if (hexadecimal[i] >= '0' && hexadecimal[i] <= '9') {decimal += (hexadecimal[i] - '0') * pow(16, hexadecimal.size() -1 - i);} else if (hexadecimal[i] >= 'A' && hexadecimal[i] <= 'F') {decimal += (hexadecimal[i] - 'A' + 10) * pow(16, hexadecimal.size() - 1 - i);}}return decimal;}// 主函数int main() {int decimalNumber;cout << "请输入一个十进制数: ";cin >> decimalNumber;cout << "十进制数" << decimalNumber << " 转换为二进制为: " << decimalToBinary(decimalNumber) << endl;cout << "十进制数" << decimalNumber << " 转换为八进制为: " << decimalToOctal(decimalNumber) << endl;cout << "十进制数" << decimalNumber << " 转换为十六进制为: " << decimalToHexadecimal(decimalNumber) << endl;string binaryNumber, octalNumber, hexadecimalNumber;cout << "请输入一个二进制数: ";cin >> binaryNumber;cout << "二进制数" << binaryNumber << " 转换为十进制为: " << binaryToDecimal(binaryNumber) << endl;cout << "请输入一个八进制数: ";cin >> octalNumber;cout << "八进制数" << octalNumber << " 转换为十进制为: " << octalToDecimal(octalNumber) << endl;cout << "请输入一个十六进制数: ";cin >> hexadecimalNumber;cout << "十六进制数 " << hexadecimalNumber << " 转换为十进制为: " << hexadecimalToDecimal(hexadecimalNumber) << endl;return 0;}```在上述代码中,我们定义了三个函数 `decimalToBinary`、`decimalToOctal` 和`decimalToHexadecimal`,用于将十进制数转换为二进制、八进制和十六进制数。
C语言实现任意进制转换任意进制转换是指将一个数从一种进制表示转换为另一种进制表示。
在计算机科学中,常见的进制包括二进制、八进制、十进制和十六进制。
下面我们将以C语言为例,实现任意进制之间的转换。
一、十进制到其他进制的转换1.二进制转换对于一个十进制数,我们可以通过对其进行除2取余的操作,得到其二进制表示。
具体的实现如下:```c#include<stdio.h>void decimalToBinary(int num)int binary[32], i = 0;while (num > 0)binary[i] = num % 2;i++;num /= 2;}for (int j = i - 1; j >= 0; j--)printf("%d", binary[j]);}int mainint decimalNumber;printf("请输入一个十进制数:");scanf("%d", &decimalNumber);printf("转换为二进制数为:");decimalToBinary(decimalNumber);return 0;```2.八进制转换对于十进制数,可以通过对其进行除8取余的操作,得到其八进制表示。
具体的实现如下:```c#include<stdio.h>void decimalToOctal(int num)int octal[100], i = 0;while (num > 0)octal[i] = num % 8;i++;num /= 8;}for (int j = i - 1; j >= 0; j--)printf("%d", octal[j]);}int mainint decimalNumber;printf("请输入一个十进制数:");scanf("%d", &decimalNumber);printf("转换为八进制数为:");decimalToOctal(decimalNumber);return 0;```3.十六进制转换对于一个十进制数,可以通过对其进行除16取余的操作,得到其十六进制表示。
#include<stdio.h>#include<string.h>#include<stdlib.h>void D_B(int);void D_O(int);void D_X(int);void B_D(int);void B_O(int);void B_X(int);void O_B(int);void O_D(int);void O_X(int);void X_B(char r[],int k);void X_D(char r[],int k);void X_O(char r[],int k);void main(){int i,j,k=0;int q;char r[10];printf("+=============================================================+\n");printf("| 欢迎使用进制转换程序|\n");printf("+=============================================================+\n");printf(" 注:本版本只做正整数的进制转换!!");do{q=0;//fflush(stdin);printf("\n请选择需要被转换的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");scanf("%d",&i);switch (i){case 1: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");scanf("%d",&j);switch(j){case 1: printf("\n同进制之间不用转化!\n");q=1;break;case 2: printf("\n请输入您想要转化的数:");scanf("%d",&k);B_O(k);break;case 3: printf("\n请输入您想要转化的数:");scanf("%d",&k);B_D(k);q=1;break;case 4: printf("\n请输入您想要转化的数:");scanf("%d",&k);B_X(k);q=1;break;case 0:printf("谢谢使用!!");}break;case 2: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");scanf("%d",&j);switch(j){case 2: printf("\n同进制之间不用转化!\n");q=1;break;case 1: printf("\n请输入您想要转化的数:");scanf("%d",&k);O_B(k);q=1;break;case 3: printf("\n请输入您想要转化的数:");scanf("%d",&k);O_D(k);q=1;break;case 4: printf("\n请输入您想要转化的数:");scanf("%d",&k);O_X(k);q=1;break;case 0:printf("谢谢使用!!");}case 3: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");scanf("%d",&j);switch(j){case 3: printf("\n同进制之间不用转化!\n");q=1;break;case 1: printf("\n请输入您想要转化的数:");scanf("%d",&k);D_B(k);q=1;break;case 2: printf("\n请输入您想要转化的数:");scanf("%d",&k);D_O(k);q=1;break;case 4: printf("\n请输入您想要转化的数:");scanf("%d",&k);D_X(k);q=1;break;case 0:printf("谢谢使用!!");}break;case 4: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n");scanf("%d",&j);switch(j){case 4: printf("\n同进制之间不用转化!\n");q=1;break;case 1: printf("\n请输入您想要转化的数:");fflush(stdin);gets(r);for(k=0;;k++){if(r[k]=='\0')break;}X_B(r,k);q=1;break;case 2: printf("\n请输入您想要转化的数:");fflush(stdin);gets(r);for(k=0;;k++){if(r[k]=='\0')break;}X_O(r,k);q=1;break;case 3: printf("\n请输入您想要转化的数:");fflush(stdin);gets(r);for(k=0;;k++){if(r[k]=='\0')break;}X_D(r,k);q=1;break;case 0:printf("谢谢使用!!");}break;case 0: printf("\n谢谢使用!\n");}}while(q==1);}///////以下为: 二进制转换为十进制,八进制,十六进制. void B_D(int a){int i,s=0;int result=0;for(i=1;a!=0;i*=2){if(a%10>1){s=1;break;}else{result+=(a%10)*i;a=a/10;}}if(s==1)printf("您的输入有误!请重新输入\n"); elseprintf("\n转换后的数为:%d\n",result); }void B_O(int a){int i,j,k,s=0;int p[30];int result=0;for(i=1;a!=0;i*=2){if(a%10>1){s=1;break;}else{result+=(a%10)*i;a=a/10;}}for(j=0;result!=0;j++){p[j]=result%8;result=result/8;}if(s==1)printf("您的输入有误!请重新输入\n");else{printf("\n转换后的数为:"); for(k=j-1;k>=0;k--){printf("%d",p[k]);}printf("\n");}}void B_X(int a){int i,j,k,s=0;char p[30];int result=0;for(i=1;a!=0;i*=2){if(a%10>1){s=1;break;}else{result+=(a%10)*i;a=a/10;}}for(j=0;result!=0;j++){p[j]=result%16;result=result/16;if (p[j]>10){switch(p[j]){case 10: p[j]='A';break;case 11: p[j]='B';break;case 12: p[j]='C';break;case 13: p[j]='D';break;case 14: p[j]='E';break;case 15: p[j]='F';break;}}else p[j]+=48;}if(s==1)printf("您的输入有误!请重新输入\n");else{printf("\n转换后的数为:");for(k=j-1;k>=0;k--){printf("%c",p[k]);}printf("\n");}}///////以下为: 八进制转换为二进制,十进制,十六进制. void O_B(int a){int i,j,k,s=0;int result=0;int p[30];for(i=1;a!=0;i*=8){if(a%10>7){s=1;break;}else{result+=(a%10)*i;a=a/10;}}for(j=0;result!=0;j++){p[j]=result%2;result=result/2;}if(s==1)printf("您的输入有误!请重新输入\n"); else{printf("\n转换后的数为:");for(k=j-1;k>=0;k--){printf("%d",p[k]);}printf("\n");}}void O_D(int a){int i,s=0;int result=0;for(i=1;a!=0;i*=8){if(a%10>7){s=1;break;}else{result+=(a%10)*i;a=a/10;}}if(s==1)printf("您的输入有误!请重新输入\n"); else{printf("\n转换后的数为:%d\n",result); }}void O_X(int a){int i,j,k,s=0;char p[30];int result=0;for(i=1;a!=0;i*=8){if(a%10>7){s=1;break;}else{result+=(a%10)*i;a=a/10;}}for(j=0;result!=0;j++){p[j]=result%16;result=result/16;if(p[j]<10)p[j]+=48;else{switch(p[j]){case 10: p[j]='A';break;case 11: p[j]='B';break;case 12: p[j]='C';break;case 13: p[j]='D';break;case 14: p[j]='E';break;case 15: p[j]='F';break;}}}if(s==1)printf("您的输入有误!请重新输入\n"); else{printf("\n转换后的数为:");for(k=j-1;k>=0;k--){printf("%c",p[k]);}printf("\n");}}///////以下为: 十六进制转换为十进制,二进制,八进制. void X_D(char a[],int k){int i,j,s=0;int result=0;int b[50];for(i=0;i<k;i++){if(a[i]<='9'&&a[i]>='1'){ b[i]=a[i]-48;}else{switch(a[i]){case 'A': b[i]=10;break;case 'B': b[i]=11;break;case 'C': b[i]=12;break;case 'D': b[i]=13;break;case 'E': b[i]=14;break;case 'F': b[i]=15;break;case 'a': b[i]=10;break;case 'b': b[i]=11;break;case 'c': b[i]=12;break;case 'd': b[i]=13;break;case 'e': b[i]=14;break;case 'f': b[i]=15;break;default: s=1;}}}for(i=1,j=k-1;j>=0;j--,i*=16){result+=b[j]*i;}if(s==1)printf("您的输入有误!请重新输入\n"); else{printf("\n转换后的数为:%d",result); }}void X_B(char a[],int k){int i,j,s=0;int result=0;int b[50];int p[30];for(i=0;i<k;i++){if(a[i]<='9'&&a[i]>='1')b[i]=a[i]-48;else{switch(a[i]){case 'A': b[i]=10;break;case 'B': b[i]=11;break;case 'C': b[i]=12;break;case 'D': b[i]=13;break;case 'E': b[i]=14;break;case 'F': b[i]=15;break;case 'a': b[i]=10;break;case 'b': b[i]=11;break;case 'c': b[i]=12;break;case 'd': b[i]=13;break;case 'e': b[i]=14;break;case 'f': b[i]=15;break;default: s=1;}}}for(j=k-1,i=1;j>=0;j--,i*=16){result+=b[j]*i;}for(j=0;result!=0;j++){p[j]=result%2;result=result/2;}if(s==1)printf("您的输入有误!请重新输入\n"); else{printf("\n转换后的数为:");for(k=j-1;k>=0;k--){printf("%d",p[k]);}printf("\n");}}void X_O(char a[],int k){int i,j,s=0;int result=0;int b[30];int p[30];for(i=0;i<k;i++){if(a[i]<='9'&&a[i]>='1')b[i]=a[i]-48;else{switch(a[i]){case 'A': b[i]=10;break;case 'B': b[i]=11;break;case 'C': b[i]=12;break;case 'D': b[i]=13;break;case 'E': b[i]=14;break;case 'F': b[i]=15;break;case 'a': b[i]=10;break;case 'b': b[i]=11;break;case 'c': b[i]=12;break;case 'd': b[i]=13;break;case 'e': b[i]=14;break;case 'f': b[i]=15;break;default: s=1;}}}for(j=k-1,i=1;j>=0;j--,i*=16) {result+=b[j]*i;}for(j=0;result!=0;j++){p[j]=result%8;result=result/8;}if(s==1)printf("您的输入有误!请重新输入\n");else{printf("\n转换后的数为:");for(k=j-1;k>=0;k--){printf("%d",p[k]);}printf("\n");}}///////以下为: 十进制转换为二进制,八进制,十六进制. void D_B(int a){int j,k;int p[30];for(j=0;a!=0;j++){p[j]=a%2;a=a/2;}printf("\n转换后的数为:");for(k=j-1;k>=0;k--){printf("%d",p[k]);}printf("\n");}void D_O(int a){int j,k;int p[30];for(j=0;a!=0;j++){p[j]=a%8;a=a/8;}printf("\n转换后的数为:"); for(k=j-1;k>=0;k--){printf("%d",p[k]);}printf("\n");}void D_X(int a){int j,k;int p[30];for(j=0;a!=0;j++){p[j]=a%16;a=a/16;if(p[j]<10)p[j]+=48;else{switch(p[j]){case 10: p[j]='A';break;case 11: p[j]='B';break;case 12: p[j]='C';break;case 13: p[j]='D';break;case 14: p[j]='E';break;case 15: p[j]='F';break;}}}printf("\n转换后的数为:"); for(k=j-1;k>=0;k--){printf("%c",p[k]);}printf("\n");}。