进制转换(C语言编程代码+超详解析) 您所在的位置:网站首页 十六进制0x10转十进制 进制转换(C语言编程代码+超详解析)

进制转换(C语言编程代码+超详解析)

2023-12-14 22:30| 来源: 网络整理| 查看: 265

进制转换(C语言编程代码+超详解析) 浅析进制的转换原理:

进制也就是进位制,做加法运算时满 x 进 1,做减法时借 1 当 x,这就是 x 进制,包含 x 个数字即区间 [0, x-1],基数为 x;十进制有 0~9 共10个数字,基数为10,在加减法运算中,满10进1,借1当10。

进制表 十进制数二进制数八进制数十六进制数000011111102231133410044510155611066711177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F

如果是16,这与之相对应的10000 20 0x10

n进制到十进制的转换

使用按权展开求和方法

二进制转十进制:1101=1X2³+1X2²+0X2¹+1X2⁰

十六进制转十进制:4C=4X16¹+12X16⁰

让我们看一下二进制转换成十进制的代码吧

#include #include int main() { long long binary; int decimal = 0, i = 0, remainder; printf("请输入一个二进制数:"); scanf("%lld", &binary); while (binary != 0) { remainder = binary % 10; binary /= 10; decimal += remainder * pow(2, i); ++i; } printf("转换后的十进制数为:%d", decimal); return 0; } 十进制转化n进制的转换

整除法

二进制:将十进制数不断除以2,直到商为0,然后将所有的余数倒序排列即可得到二进制数。八进制:将十进制数不断除以8,直到商为0,然后将所有的余数倒序排列即可得到八进制数。十六进制:将十进制数不断除以16,直到商为0,然后将所有的余数倒序排列,将10-15分别用A-F代替即可得到十六进制数。其他进制:将十进制数不断除以目标进制,直到商为0,然后将所有的余数倒序排列即可得到目标进制数。 #include // 将十进制数转换为二进制 void decimalToBinary(int n) { int binaryNum[32]; int i = 0; while (n > 0) { binaryNum[i] = n % 2; n = n / 2; i++; } for (int j = i - 1; j >= 0; j--) { printf("%d", binaryNum[j]); } } // 将十进制数转换为八进制 void decimalToOctal(int n) { int octalNum[100]; int i = 0; while (n > 0) { octalNum[i] = n % 8; n = n / 8; i++; } for (int j = i - 1; j >= 0; j--) { printf("%d", octalNum[j]); } } // 将十进制数转换为十六进制 void decimalToHexadecimal(int n) { char hexaDecimalNum[100]; int i = 0; while (n != 0) { int temp = 0; temp = n % 16; if (temp hexaDecimalNum[i] = temp + 55; } i++; n = n / 16; } for (int j = i - 1; j >= 0; j--) { printf("%c", hexaDecimalNum[j]); } } int main() { int decimalNum; printf("Enter a decimal number: "); scanf("%d", &decimalNum); printf("Binary: "); decimalToBinary(decimalNum); printf("\nOctal: "); decimalToOctal(decimalNum); printf("\nHexadecimal: "); decimalToHexadecimal(decimalNum); return 0; } 其他进制相互转换

有些进制之间不能直接转换是因为它们之间的表示方式和数值系统不同。进制是一种表示数字的方式,它使用不同的基数来确定数字的权重。常见的进制包括十进制(基数为10)、二进制(基数为2)、八进制(基数为8)和十六进制(基数为16)。

当两个进制之间的基数不同,转换就会变得复杂。例如,将二进制转换为十进制,需要根据权重计算每个位上的值,然后将它们相加。同样地,将十进制转换为二进制,需要将数字逐步除以2,并记录余数,直到商为0为止。

总之,进制之间的转换需要根据不同的基数和表示方式进行计算,因此有些进制之间不能直接转换。

二进制八进制相互转换 三合一:

将二进制数转换为八进制的方法是将二进制数按照三位一组进行分割,然后将每组转换为对应的八进制数。如果最后一组不足三位,可以在最前面补0凑成三位。下面是一个示例:

假设要将二进制数 110110110 转换为八进制数:

将二进制数按照三位一组进行分割: 110 110 110然后将每组转换为对应的八进制数: 6 6 6所以二进制数110110110转换为八进制数为666。

接下来是C语言代码示例,用于将二进制数转换为八进制数:

#include #include int main() { long long binaryNumber; int octalNumber = 0, decimalNumber = 0, i = 0; // 输入二进制数 printf("Enter a binary number: "); 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("The octal number is: %d", octalNumber); return 0; } 二进制十六进制相互转换 四合一:

将二进制数转换为十六进制数的方法是将二进制数按照四位一组进行分割,然后将每组转换为对应的十六进制数。如果最后一组不足四位,可以在最前面补0凑成四位。下面是一个示例:

假设要将二进制数 110110110 转换为十六进制数:

将二进制数按照四位一组进行分割: 1101 1011 0然后将每组转换为对应的十六进制数: D B 0所以二进制数110110110转换为十六进制数为DB0。

接下来是C语言代码示例,用于将二进制数转换为十六进制数:

#include #include int main() { char binaryNumber[100], hexaDecimal[100]; int i = 0; // 输入二进制数 printf("Enter a binary number: "); scanf("%s", binaryNumber); // 补0凑成四位 int length = strlen(binaryNumber); int extra = 4 - (length % 4); if(extra != 4) { for(int j = 0; j int temp = 0; for(int j = 0; j hexaDecimal[length/4 - 1] = temp + '0'; } else { hexaDecimal[length/4 - 1] = temp - 10 + 'A'; } length -= 4; } hexaDecimal[i] = '\0'; printf("The hexadecimal number is: %s", hexaDecimal); return 0; } 十六进制与八进制互相转换

要将十六进制数转换为八进制数,或者将八进制数转换为十六进制数,可以先将待转换的数先转换为二进制数,然后再将二进制数转换为目标进制数。下面分别介绍两种转换的方法。

十六进制转换为八进制: 将十六进制数的每一位转换为四位的二进制数,然后将所有二进制数合并在一起。将得到的二进制数按照三位一组进行分割,然后将每组转换为对应的八进制数。 八进制转换为十六进制: 将八进制数的每一位转换为三位的二进制数,然后将所有二进制数合并在一起。将得到的二进制数按照四位一组进行分割,然后将每组转换为对应的十六进制数。

下面是一个C语言代码示例,用于将十六进制数转换为八进制数:

#include #include int main() { char hexadecimalNumber[100], binaryNumber[400], octalNumber[100]; int i = 0; // 输入十六进制数 printf("Enter a hexadecimal number: "); scanf("%s", hexadecimalNumber); // 将十六进制数转换为二进制数 int length = strlen(hexadecimalNumber); for(int j = 0; j case '0': strcat(binaryNumber, "0000"); break; case '1': strcat(binaryNumber, "0001"); break; case '2': strcat(binaryNumber, "0010"); break; case '3': strcat(binaryNumber, "0011"); break; case '4': strcat(binaryNumber, "0100"); break; case '5': strcat(binaryNumber, "0101"); break; case '6': strcat(binaryNumber, "0110"); break; case '7': strcat(binaryNumber, "0111"); break; case '8': strcat(binaryNumber, "1000"); break; case '9': strcat(binaryNumber, "1001"); break; case 'A': case 'a': strcat(binaryNumber, "1010"); break; case 'B': case 'b': strcat(binaryNumber, "1011"); break; case 'C': case 'c': strcat(binaryNumber, "1100"); break; case 'D': case 'd': strcat(binaryNumber, "1101"); break; case 'E': case 'e': strcat(binaryNumber, "1110"); break; case 'F': case 'f': strcat(binaryNumber, "1111"); break; default: printf("Invalid hexadecimal digit %c", hexadecimalNumber[j]); return 1; } } // 补0凑成三位 length = strlen(binaryNumber); int extra = 3 - (length % 3); if(extra != 3) { for(int j = 0; j int temp = 0; for(int j = 0; j


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有