不同进制间的相互转化。

不同进制间的相互转化。
简化和小小修正了下。写的很清楚明白了。至少我这个文科头脑理科白痴是看懂了。是举一反三以此类推的东西。最近在看三级网络技术。作茧自缚中……
ps:n位制就是逢n进一。这个就不需要说明了吧~

1、二进制转换成十进制
二进制转换成十进制可以用多项式来表示,在这之后的“八进制”和“十六进制”也一样。
例:将二进制的1011.1011转换成十进制的数字
1011.1011
=1*2 3+0*2 2+1*2 1+1*2 0+1*2 -1+0*2 -2+1*2 -3+1*2 -4
=8+0+2+1+1/2+0+1/8+1/16= 11
(11又16分之11)
(其中2是基数,2的指数从0开始到最大的指数3的个数和整数相同)

2、十进制转换成二进制
整数“ 除2取余”,小数部分“ 乘2取整”。
例:将十进制数字211.25转换成二进制数字:
整数部分211作除2去余运算如下:
    除式        商     余数
  211/2       105     1
  105/2        52      1
   52/2         26      0
   26/2         13      0
   13/2          6       1
    6/2           3       0
    3/2           1       1
    1/2           0       1
用整数除以2后得到的商再除以2,一直除到商为0为止。将余数 从下到上排列就是该整数的二进制数字,在本例中,二进制是11010011。
小数0.25进行乘2取整运算如下:
乘式         结果的小数部分      结果的整数部分
0.25*2       0.5                                  0
0.5*2           0                                   1
注意:小数部分要一直运算到乘式得到的小数部分是0为止。小数部分是 从上往下排列 。
最后把整数部分和小数部分组合起来就是十进制211.25 的二进制表示11010011.01。

3、八进制转十进制:
整数“ 除8取余”,小数部分“ 乘8取整”。
注意:八进制的八个数字,分别为0、1、2、3、4、5、6、7。

4、十六进制转十进制:
整数“ 除16取余”,小数部分“ 乘16取整”。
注意:十六进制的十六个数字,分别为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中的A、B、C、D、E、F分别代表11、12、13、14、15、16这几个数字,他们仅仅代表一位,而不是像13这样的两位数。如F+1=11(逢16进一,此时的11表示的是十进制的17)。

5、二进制与八进制

二进制    八进制           
000            0                 
001            1                  
010            2                  
011            3                
100            4 
101            5
110            6
111            7
上表每三位二进制数字就对应一个八进制数字。二进制转换八进制时整数部分,将二进制位数 从低位起至高位排列,三位一组(不足三位的在 边加0),然后利用该表对应填入相应的八进制形式。小数部分,将二进制位数 从左往右排列,三位一组,不足三位的 后面补0 ,然后按三位数取八进制数字。
例:将二进制数字11111.1011转换成八进制数字。
11111.1011=011 111 .101 100
从表格我们知道011就是八进制的3;111是7;101是5; 100是6;所以二进制的11111.1011表示八进制的37.56。

6、八进制转换二进制
将八进制数字里的每一位用三个二进制数字表示。左边多0省略,小数最右边是0也省略。
例: 13.14= 001 011 .001 100=1011.0011

7、二进制转十六进制

二进制    十六进制           
0000            0                  
0001            1                   
0010            2                   
0011            3                   
0100            4                   
0101            5                   
0110            6                   
0111            7                
1000            8 
1001            9
1010            A
1011            B
1100            C
1101            D
1110            E
1111            F 

8、八进制转换成十六进制:不能直接转换,通过将其中一个转换成二进制,再由二进制进行转换。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,下面是使用 C 语言实现十进制与三十二进制相互转化的代码示例。 首先是十进制转三十二进制的函数: ``` void decToHex(long long n) { char hexaDeciNum[100]; // 递归转换为三十二进制数 int i = 0; while(n!=0) { int temp = 0; // 临时变量记录余数 temp = n % 32; // 将三十二进制转换为ASCII码 if(temp < 10) { hexaDeciNum[i] = temp + 48; i++; } else { hexaDeciNum[i] = temp + 55; i++; } n = n/32; } // 反转字符串 reverse(hexaDeciNum, hexaDeciNum + strlen(hexaDeciNum)); printf("%s\n", hexaDeciNum); } ``` 接下来是三十二进制转十进制的函数: ``` long long hexToDec(char* hexVal) { long long deciVal = 0; // 从右向左遍历字符串 for (int i=strlen(hexVal)-1; i>=0; i--) { // 将字符转换为数字 if (hexVal[i]>='0' && hexVal[i]<='9') { deciVal += (hexVal[i] - 48)*pow(32, strlen(hexVal)-1-i); } else if (hexVal[i]>='A' && hexVal[i]<='Z') { deciVal += (hexVal[i] - 55)*pow(32, strlen(hexVal)-1-i); } } return deciVal; } ``` 使用这些函数时,你可以这样调用: ``` long long n; char hexaDeciNum[100]; // 输入十进制数 printf("Enter a decimal number: "); scanf("%lld", &n); // 转换为三十二进制数 decToHex(n); // ### 回答2: 使用C语言实现十进制到三十二进制相互转化的思路如下: 1. 十进制转三十二进制:首先,我们需要对十进制数进行求余运算,从而得到每一位的余数,这个余数即为三十二进制数的一位;然后,将余数存储到数组中;接着,将原十进制数除以32再次进行整除和求余的循环运算,直到原十进制数为0,结束循环;最后,逆置数组中的元素,即可得到三十二进制数。 ```c #include <stdio.h> void decimalToBase32(int decimal, char base32[]) { int remainder, i = 0; while (decimal != 0) { remainder = decimal % 32; base32[i] = remainder + '0'; decimal /= 32; i++; } base32[i] = '\0'; // Reverse the digits int start = 0, end = i - 1; while (start < end) { char temp = base32[start]; base32[start] = base32[end]; base32[end] = temp; start++; end--; } } void base32ToDecimal(char base32[], int* decimal) { int i = 0; while (base32[i] != '\0') { *decimal = *decimal * 32 + (base32[i] - '0'); i++; } } int main() { int decimal; char base32[50]; // 十进制转三十二进制 decimal = 1234; decimalToBase32(decimal, base32); printf("The base-32 representation of %d is %s\n", decimal, base32); // 三十二进制转十进制 char base32Number[] = "2HI"; int convertedDecimal = 0; base32ToDecimal(base32Number, &convertedDecimal); printf("The decimal representation of %s is %d\n", base32Number, convertedDecimal); return 0; } ``` 以上代码实现了十进制到三十二进制转化以及反向转化。输入的十进制数为1234,输出的三十二进制数为4532;输入的三十二进制数为"2HI",输出的十进制数为14692。 ### 回答3: 使用C语言可以实现十进制与三十二进制相互转化。具体实现步骤如下: 1. 十进制转三十二进制: - 创建一个数组用于存储三十二进制的每一位数字。 - 使用循环将十进制数除以32,将余数存储在数组中,然后更新十进制数为商。 - 当十进制数为0时,结束循环。 - 反向遍历数组,将每一位数字转化为对应的三十二进制字符。 - 输出转化后的三十二进制数。 2. 三十二进制转十进制: - 创建一个变量用于存储最终的十进制数。 - 使用循环遍历三十二进制数的每一位。 - 将每一位字符转化为对应的数字。 - 将转化后的数字乘以32的幂次方,并累加到最终的十进制数中。 - 输出转化后的十进制数。 下面是一个简单的示例代码,实现了十进制与三十二进制相互转化: ```c #include <stdio.h> #include <string.h> void decimalToThirtyTwo(int decimal) { int thirtyTwo[10] = {0}; int i = 0; while (decimal > 0) { thirtyTwo[i++] = decimal % 32; decimal /= 32; } for (i = 9; i >= 0; i--) { printf("%c", thirtyTwo[i] + '0'); } printf("\n"); } int thirtyTwoToDecimal(char thirtyTwo[]) { int decimal = 0; int len = strlen(thirtyTwo); int i; for (i = 0; i < len; i++) { decimal += (thirtyTwo[i] - '0') * pow(32, len - i - 1); } return decimal; } int main() { int decimal = 9876; char thirtyTwo[] = "10X"; printf("十进制转三十二进制:\n"); decimalToThirtyTwo(decimal); printf("三十二进制转十进制:\n"); printf("%d\n", thirtyTwoToDecimal(thirtyTwo)); return 0; } ``` 通过上述代码,可以实现十进制与三十二进制相互转化。其中,`decimalToThirtyTwo`函数将十进制转化为三十二进制,并输出结果;`thirtyTwoToDecimal`函数接收一个三十二进制字符数组,将其转化为十进制数并返回。在示例中,十进制数为9876,将其转化为三十二进制后输出为"001020",然后将三十二进制数"10X"转化为十进制数,并输出结果为19792。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值