【转】进制互换程序

2019-07-19 14:07发布

利用位操作以及掩码进行进制间的相互转换。例一:将输入的一个整型数,转换成相应的二进制数
[objc] view plain copy


  • #include <stdio.h>  
  •   
  • void int2bin(int num)  
  • {  
  •     int i;  
  •     int temp;  
  •     int mask = 1;  
  •   
  •     for(i = 31;i >= 0;i --)  
  •     {  
  •         temp = ((num >> i) & mask);  
  •         printf("%d",temp);  
  •       
  •         if(i % 4 == 0)  
  •         {  
  •             printf(" ");  
  •         }  
  •     }  
  •   
  •     printf(" ");  
  • }  
  •   
  • int main()  
  • {  
  •     int num;  
  •   
  •     printf("Please input an integer: ");  
  •     scanf("%d",&num);  
  •   
  •     int2bin(num);  
  •   
  •     return 0;  
  • }  



调试结果如下:

[objc] view plain copy


  • Please input an integer:  
  • 2345  
  • 0000 0000 0000 0000 0000 1001 0010 1001   


上面的程序是将输入的整型数进行左移,我在下面试一下用右移的方法实现该功能

[objc] view plain copy


  • #include <stdio.h>  
  •   
  • void int2bin(int num)  
  • {  
  •     int i;  
  •     unsigned int temp;  
  •   
  •     unsigned int mask = 0x80000000;  
  •   
  •     for(i = 1;i <= 32;i ++)  
  •     {  
  •         temp = (unsigned int)((unsigned int)(num << i) & mask);  
  •         printf("%d",temp);  
  •   
  •         if(i % 4 == 0)  
  •         {  
  •             printf(" ");  
  •         }  
  •     }  
  •   
  •     printf(" ");  
  • }  
  •   
  • int main()  
  • {  
  •     int num;  
  •   
  •     printf("Please input an interger: ");  
  •     scanf("%d",&num);  
  •   
  •     int2bin(num);  
  •   
  •     return 0;  
  • }  

调试结果为:

[objc] view plain copy


  • Please input an integer:  
  • 2345  
  • 0000 0000 0000 0000 0000 1001 0010 1001   



例二:将整型数转换成相应的八进制数

[objc] view plain copy


  • #include <stdio.h>  
  •    
  • #define MAX_SIZE 1024  
  •   
  • void int2oct(int num)  
  • {  
  •     int i;  
  •     int temp1;  
  •     int temp = 1;  
  •     int step = -1;  
  •   
  •     char oct[MAX_SIZE];  
  •     oct[0] = '0';  
  •   
  •     while(num - temp >= 0)  
  •     {  
  •         temp = temp * 8;  
  •         step ++;  
  •     }  
  •       
  •     temp = temp / 8;  
  •   
  •     for(i = 1;i <= step + 1;i ++,temp = temp / 8)  
  •     {  
  •         temp1 = num / temp;  
  •         num = num - temp * temp1;  
  •         oct = temp1 + '0';  
  •     }  
  •       
  •     oct = '';  
  •   
  •     printf("The oct is:%s. ",oct);  
  • }  
  •   
  • int main()  
  • {  
  •     int num;  
  •   
  •     printf("Please input an integer: ");  
  •     scanf("%d",&num);  
  •   
  •     int2oct(num);  
  •   
  •     return 0;  
  • }  


调试结果为:
[objc] view plain copy


  • Please input an integer:  
  • 36475  
  • The oct is:0107173.  




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
联通移不动
2019-07-19 15:51


例五:二进制数转换成相应的十进制数[objc] view plain copy


  • #include <stdio.h>  
  • #include <string.h>  
  •   
  • #define MAX_SIZE 1024  
  •   
  • int bin2int(charchar * bin,int len)  
  • {  
  •     int i;  
  •     int temp1;  
  •   
  •     int num = 0;  
  •     int temp = 1;  
  •       
  •     for(i = len - 1;i >= 0;i --)  
  •     {  
  •         temp1 = *(bin + i) - '0';  
  •         num = num + temp1 * temp;  
  •   
  •         temp = temp * 2;  
  •     }  
  •   
  •     return num;  
  • }  
  •   
  • int main()  
  • {  
  •     int num;  
  •     int len;  
  •   
  •     char bin[MAX_SIZE];  
  •   
  •     printf("Please input the binary: ");  
  •     scanf("%s",bin);  
  •   
  •     len = strlen(bin);  
  •   
  •     num = bin2int(bin,len);  
  •   
  •     printf("The integer of the binary is:%d. ",num);  
  •   
  •     return 0;  
  • }  

调试结果为:
[objc] view plain copy


  • Please input the binary:  
  • 1101110101011  
  • The integer of the binary is:7083.  


例六:将二进制数转换成相应的十六进制数
[objc] view plain copy


  • #include <stdio.h>  
  • #include <string.h>  
  •   
  • #define MAX_SIZE 1024  
  •   
  • charchar * bin2hex(charchar * bin,int len_bin)  
  • {  
  •     int i;  
  •     int j;  
  •     int len_hex;  
  •   
  •     int temp = 1;  
  •     int temp1 = 0;  
  •     int count = 0;  
  •   
  •     static char hex[MAX_SIZE];  
  •     hex[0] = '0';  
  •     hex[1] = 'x';  
  •   
  •     if(len_bin % 4 == 0)  
  •     {  
  •         len_hex = len_bin / 4;  
  •     }  
  •     else  
  •     {  
  •         len_hex = len_bin / 4 + 1;  
  •     }  
  •   
  •     j = len_hex + 1;  
  •   
  •     for(i = len_bin - 1;i >= 0;i --)  
  •     {  
  •         if(count < 4)  
  •         {  
  •             temp1 = (bin - '0') * temp + temp1;  
  •             temp = temp * 2;  
  •             count ++;  
  •   
  •             if(i == 0)  
  •             {  
  •                 hex[2] = temp1 + '0';  
  •             }  
  •         }  
  •         else  
  •         {  
  •             if(temp1 >= 10)  
  •             {  
  •                 hex[j] = temp1 - 10 + 'a';  
  •             }  
  •             else  
  •             {  
  •                 hex[j] = temp1 + '0';  
  •             }  
  •   
  •             count = 0;  
  •             temp = 1;  
  •             temp1 = 0;  
  •             i ++;  
  •             j --;  
  •         }  
  •     }  
  •   
  •     hex[len_hex + 2] = '';  
  •   
  •     return hex;  
  • }  
  •   
  • int main()  
  • {  
  •     int len_bin;  
  •     char bin[MAX_SIZE];  
  •   
  •     printf("Please input the binary: ");  
  •     scanf("%s",bin);  
  •   
  •     len_bin = strlen(bin);  
  •   
  •     charchar * hex = bin2hex(bin,len_bin);  
  •   
  •     printf("The hex of bin is:%s. ",hex);  
  •   
  •     return 0;  
  • }  


调试结果为:
[objc] view plain copy


  • Please input the binary:  
  • 1110100101011  
  • The hex of bin is:0x1d2b.  

二进制转换成十六进制数跟二进制数转换成八进制数相同,也是有两种方法:一种是上面程序的方法,即将二进制数直接转换成十六进制数,另一个就是先将二进制数转换成十进制数,再将十进制数转换成十六进制数。another:
[objc] view plain copy


  • #include <stdio.h>  
  • #include <string.h>  
  •   
  • #define MAX_SIZE 1024  
  •   
  • charchar * bin2hex(charchar * bin,int len_bin)  
  • {  
  •     int i;  
  •     int len_hex;  
  •   
  •     int ten = 0;  
  •     int temp = 1;  
  •     int temp1 = 1;  
  •     int step = -1;  
  •   
  •     static char hex[MAX_SIZE];  
  •   
  •     while(*bin != '')  
  •     {  
  •         ten = (*(bin + len_bin - 1) - '0') * temp + ten;  
  •   
  •         temp = temp * 2;  
  •         bin ++;  
  •         len_bin = len_bin - 2;  
  •     }  
  •   
  •     while(ten - temp1 >= 0)  
  •     {  
  •         temp1 = temp1 * 16;  
  •         step ++;  
  •     }  
  •   
  •     temp1 = temp1 / 16;  
  •   
  •     len_hex = step + 1;  
  •       
  •     hex[0] = '0';  
  •     hex[1] = 'x';  
  •   
  •     for(i = 2;i <= len_hex + 1;i ++)  
  •     {  
  •         if(ten / temp1 >= 10)  
  •         {  
  •             hex = (ten / temp1) - 10 + 'a';  
  •         }  
  •         else  
  •         {  
  •             hex = (ten /temp1) + '0';  
  •         }  
  •   
  •         ten = ten - (ten / temp1) * temp1;  
  •         temp1 = temp1 / 16;  
  •     }  
  •   
  •     hex = '';  
  •   
  •     return hex;  
  • }  
  •   
  • int main()  
  • {  
  •     int len_bin;  
  •     char bin[MAX_SIZE];  
  •   
  •     printf("Please input the binary: ");  
  •     scanf("%s",bin);  
  •       
  •     len_bin = strlen(bin);  
  •     charchar * hex = bin2hex(bin,len_bin);  
  •   
  •     printf("The hex of the binary is:%s. ",hex);  
  •   
  •     return 0;  
  •   
  • }  


调试结果为:

[objc] view plain copy


  • Please input the binary:  
  • 11110101010101011101101  
  • The hex of the binary is:0x7aaaed.  
[url=][/url]




一周热门 更多>