C语言进制转换(全)
C语言进制转换(全)
- 转二进制:
- 十进制转二进制(10➤2)
- 十六进制转二进制(16➤2)
- 八进制转二进制(8➤2)
- 转十六进制
- 二进制转十六进制(2➤16)
- 八进制转十六进制(8➤16)
- 十进制转十六进制(10➤16)
- 转八进制
- 二进制转八进制(2➤8)
- 十进制转八进制(10➤8)
- 十六进制转八进制(16➤8)
- 转十进制
- 二进制转十进制(2➤10)
- 八进制转十进制(8➤10)
- 十六进制转十进制(16➤10)
转二进制:
十进制转二进制(10➤2)
可以通过不断地对10取余数并向左移动二进制位来将十进制数转换为二进制数。具体步骤如下:
(图片来源网络,侵删)1.定义一个数组存放二进制数。
2.定义一个变量记录数组下标。
3.循环取10的余数,直到10为0为止。
4.每次取余数后将其存入数组中。
5.每次取余数后将数组下标加1。
6.最后将数组倒序输出。
代码如下
#include int main() { int decimal, remainder, index = 0; int binary[32]; printf("请输入一个十进制数:"); scanf("%d", &decimal); while (decimal != 0) { remainder = decimal % 2; binary[index] = remainder; index++; decimal /= 2; } printf("转换为二进制数为:"); for (int i = index - 1; i >= 0; i--) { printf("%d", binary[i]); } return 0; }
十六进制转二进制(16➤2)
通过使用switch语句和十六进制数的位操作实现了16进制数到2进制数的转换。具体来说,程序遍历输入的16进制数的每一个字符,然后根据字符的值使用相应的case标签,在输出中添加对应的2进制数。
代码如下
#include int main() { char hex[17]; int i = 0; // 读入16进制数 printf("请输入16进制数:"); scanf("%s", hex); printf("对应的2进制数为:"); while (hex[i]) { switch (hex[i]) { case '0': printf("0000"); break; case '1': printf("0001"); break; case '2': printf("0010"); break; case '3': printf("0011"); break; case '4': printf("0100"); break; case '5': printf("0101"); break; case '6': printf("0110"); break; case '7': printf("0111"); break; case '8': printf("1000"); break; case '9': printf("1001"); break; case 'A': case 'a': printf("1010"); break; case 'B': case 'b': printf("1011"); break; case 'C': case 'c': printf("1100"); break; case 'D': case 'd': printf("1101"); break; case 'E': case 'e': printf("1110"); break; case 'F': case 'f': printf("1111"); break; default: printf("\n错误:无效的16进制数!\n"); return 0; } i++; } return 0; }
运行程序后,输入要转换的16进制数,程序会输出对应的2进制数。注意,程序中只能处理大写或小写字母的16进制数,若输入的字符串中含有其他字符,程序会提示无效的16进制数。
八进制转二进制(8➤2)
1.首先,要从用户获取一个八进制数。
2.在while循环中,我们模拟二进制的转换过程。
3.在每次迭代中,将八进制数的最后一位存储在 rem变量中。
4.然后将其转换为二进制并将其添加到 binary_num 变量中。
5.base 变量用于计算二进制数中的每个位数。
6.最后,打印出生成的二进制数。
代码如下
#include int main() { int octal_num, binary_num = 0, base = 1, rem; printf("Enter an octal number: "); scanf("%d", &octal_num); while (octal_num > 0) { rem = octal_num % 10; binary_num += rem * base; base *= 2; octal_num /= 10; } printf("Binary number: %d", binary_num); return 0; }
转十六进制
二进制转十六进制(2➤16)
在C语言中,可以使用printf函数和格式化字符串控制符来实现二进制转十六进制的操作。
代码如下
#include int main() { int binary = 10101110; // 二进制数 int hex = 0; // 十六进制数 int i = 0; while (binary != 0) { // 将每四位二进制数转换为一个十六进制数 hex += (binary % 10) * (1 int octal = 037; char hex[10]; sprintf(hex, "%X", octal); printf("%o in octal is %s in hexadecimal.\n", octal, hex); return 0; } int dec = 336; char hex[10]; sprintf(hex, "%X", dec); // 将十进制数转成十六进制字符串 printf("%s\n", hex); // 输出十六进制数 return 0; } long long binaryNumber; int octalNumber = 0, decimalNumber = 0, i = 0; printf("输入一个二进制数: "); scanf("%lld", &binaryNumber); // 将二进制转换为十进制 while (binaryNumber != 0) { decimalNumber += (binaryNumber % 10) * pow(2, i); ++i; binaryNumber /= 10; } i = 1; // 将十进制转换为八进制 while (decimalNumber != 0) { octalNumber += (decimalNumber % 8) * i; decimalNumber /= 8; i *= 10; } printf("转换为八进制数为: %d", octalNumber); return 0; } int octalNumber = 0, i = 1; // 从十进制数开始迭代 while (decimalNumber != 0) { octalNumber += (decimalNumber % 8) * i; decimalNumber /= 8; i *= 10; } printf("转换后的八进制数为: %d", octalNumber); } int main() { int decimalNumber; printf("请输入一个十进制数: "); scanf("%d", &decimalNumber); DecimalToOctal(decimalNumber); return 0; } char hex_num[10], oct_num[10]; int i, j, k, digit; long int dec_num = 0, octal_num = 0; printf("Enter a hexadecimal number: "); scanf("%s", hex_num); // Converting hexadecimal to decimal for(i = 0; hex_num[i] != '\0'; i++) { if(hex_num[i] = '0' && hex_num[i] = 'A' && hex_num[i] = 'a' && hex_num[i] oct_num[j] = dec_num % 8 + '0'; dec_num /= 8; } // Reversing the octal number for(k = j - 1; k = 0; k--) { octal_num = 10 * octal_num + (oct_num[k] - '0'); } printf("The octal equivalent of %s is %ld.\n", hex_num, octal_num); return 0; }
该程序首先从用户接收一个十六进制数,将其转换为整数(十进制),然后将其转换为八进制数,并输出结果。程序中使用了一个循环来计算十六进制数的十进制值,并使用另一个循环来计算该十进制数的八进制值。最后,程序将八进制数反转并输出结果。
例如:
- 周一至周五晚上 7 点—晚上9点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
转十进制
二进制转十进制(2➤10)
C语言中可以使用 strtol() 函数将二进制字符串转换为十进制
long strtol(const char *nptr, char **endptr, int base);
其中,nptr 表示待转换的字符串,endptr 表示转换结束后的指针位置,base 表示被转换数字的进制数,一般为 2、8、10 或16。
代码如下
#include #include int main() { char binary[] = "10101"; char *endptr; long decimal = strtol(binary, &endptr, 2); printf("Binary: %s, Decimal: %ld\n", binary, decimal); return 0; }
八进制转十进制(8➤10)
- octal变量存储输入的八进制数。
- decimal变量存储转换后的十进制数,
- i变量用于计算相应的次方数,pow()函数用于计算次方值。
- 然后在while循环中,使用了每位数字乘以对应次方数的方法进行转换
- 最后输出结果。
代码如下
#include #include int main() { int octal, decimal = 0, i = 0; printf("请输入一个八进制数:"); scanf("%o", &octal); while (octal != 0) { decimal += (octal % 10) * pow(8, i); ++i; octal /= 10; } printf("八进制数 %o 转换为十进制数为 %d", octal, decimal); return 0; }
十六进制转十进制(16➤10)
可以使用C语言中的strtol函数来将十六进制字符串转换为十进制数。
long int strtol(const char *str, char **endptr, int base);
其中,第一个参数str是需要转换的字符串;第二个参数endptr是一个指向字符指针的指针,用于存储转换后未处理的部分;第三个参数base是转换后的数值进制,一般使用16表示十六进制。
代码如下
#include #include int main() { char hex[] = "1A"; // 十六进制字符串 long int dec = strtol(hex, NULL, 16); // 转换为十进制数 printf("%ld\n", dec); // 输出十进制数 return 0; }