打印

【转】进制互换程序

[复制链接]
449|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
联通移不动|  楼主 | 2017-1-6 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用位操作以及掩码进行进制间的相互转换。例一:将输入的一个整型数,转换成相应的二进制数
[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("\n");  
  • }  
  •   
  • int main()  
  • {  
  •     int num;  
  •   
  •     printf("Please input an integer:\n");  
  •     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("\n");  
  • }  
  •   
  • int main()  
  • {  
  •     int num;  
  •   
  •     printf("Please input an interger:\n");  
  •     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 = '\0';  
  •   
  •     printf("The oct is:%s.\n",oct);  
  • }  
  •   
  • int main()  
  • {  
  •     int num;  
  •   
  •     printf("Please input an integer:\n");  
  •     scanf("%d",&num);  
  •   
  •     int2oct(num);  
  •   
  •     return 0;  
  • }  


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


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




相关帖子

沙发
联通移不动|  楼主 | 2017-1-6 12:28 | 只看该作者
例三:将整型数转换成相应的十六进制数

[objc] view plain copy


  • #include <stdio.h>  
  •   
  • void int2hex(int num)  
  • {  
  •      int i;  
  •      int temp;  
  •   
  •      int mask = 0xf;  
  •   
  •      char hex[11] = {0};  
  •   
  •      hex[0] = '0';  
  •      hex[1] = 'x';  
  •   
  •      for(i = 0;i < 8;i ++)  
  •      {  
  •         temp = num & mask;  
  •         num = num >> 4;  
  •   
  •         if(temp >= 10)  
  •         {  
  •             hex[9 - i] = temp - 10 + 'a';  
  •         }  
  •         else  
  •         {  
  •             hex[9 - i] = temp + '0';  
  •         }  
  •      }  
  •   
  •      hex[10] = '\0';  
  •   
  •      printf("The hex is:%s.\n",hex);  
  • }  
  •   
  • int main()  
  • {  
  •     int num;  
  •   
  •     printf("Please input an integer:\n");  
  •     scanf("%d",&num);  
  •   
  •     int2hex(num);  
  •   
  •     return 0;  
  • }  


调试结果为:


[objc] view plain copy


  • Please input an integer:  
  • 2351   
  • The hex is:0x0000092f.  

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


  • #include <stdio.h>  
  • #include <string.h>  
  •   
  • #define MAX_SIZE 1024  
  •   
  • charchar * bin2oct(charchar * bin,int len)  
  • {  
  •     int i;  
  •     int j;  
  •     int oct_len;  
  •   
  •     int num = 0;  
  •     int count = 0;  
  •     int temp = 1;  
  •       
  •     static char oct[MAX_SIZE];  
  •   
  •     oct[0] = '0';  
  •   
  •     if(len % 3 == 0)    //判断八进制数是几位  
  •     {  
  •         oct_len = len / 3;  
  •     }  
  •     else   
  •     {  
  •         oct_len = (len / 3) + 1;  
  •     }  
  •   
  •     j = oct_len;  
  •   
  •     for(i = len - 1;i >= 0;i --)  
  •     {  
  •         if(count < 3)  
  •         {  
  •             num = (bin - '0') * temp + num;  
  •   
  •             temp = temp * 2;  
  •             count ++;  
  •   
  •             if(i == 0)  
  •             {  
  •                 oct[1] = num + '0';  
  •             }  
  •         }  
  •         else  
  •         {  
  •             oct[j] = num + '0';  
  •   
  •             num = 0;  
  •             temp = 1;  
  •             count = 0;  
  •   
  •             i ++;    //再返回一步  
  •             j --;  
  •         }  
  •     }  
  •   
  •     oct[oct_len + 1] = '\0';  
  •       
  •     return oct;  
  • }  
  •   
  • int main()  
  • {  
  •     int len;  
  •     char bin[MAX_SIZE];  
  •   
  •     printf("Please input the bindary:\n");  
  •     scanf("%s",bin);  
  •   
  •     len = strlen(bin);  
  •   
  •     charchar * oct = bin2oct(bin,len);  
  •   
  •     printf("The oct of the binary is:%s.\n",oct);  
  •       
  •     return 0;  
  • }  


调试结果为:

[objc] view plain copy


  • Please input the bindary:  
  • 1101011100  
  • The oct of the binary is:01534.  



其实二进制转换成八进制有两种方法,一种是将二进制先转换成十进制数再转换成八进制数,我在下面将给大家列出;另一种就是我上面所给出的程序,直接从二进制变换到八进制,即从最低位开始,每三个二进制数为一组,转换成相应的八进制数,如果二进制的个数不是三的倍数,则直接前若干个数值输出位相应的八进制数,相当于最高位补0,保证二进制的个数是三的倍数。
another:


[objc] view plain copy


  • #include <stdio.h>  
  • #include <string.h>  
  •   
  • #define MAX_SIZE 1024  
  •   
  • charchar * bin2oct(charchar * bin)  
  • {  
  •     int i;  
  •     int len;  
  •     int num;  
  •   
  •     int ten = 0;  
  •     int temp = 1;  
  •     int temp1 = 1;  
  •     int step = -1;  
  •   
  •     static char oct[MAX_SIZE];  
  •   
  •     len = strlen(bin);  
  •   
  •     while(*bin != '\0')  
  •     {  
  •         ten = ten + (* (bin + len - 1) - '0') * temp;  
  •         temp = temp * 2;  
  •         bin ++;  
  •         len = len - 2;  
  •     }  
  •   
  •     while(ten - temp1 >= 0)  
  •     {  
  •         temp1 = temp1 * 8;  
  •         step ++;  
  •     }  
  •   
  •     temp1 = temp1 / 8;  
  •   
  •     oct[0] = '0';  
  •   
  •     for(i = 1;i <= step + 1;i ++,temp1 = temp1 / 8)  
  •     {  
  •         num = ten / temp1;  
  •         ten = ten - num * temp1;  
  •         oct = num + '0';  
  •     }  
  •   
  •     oct = '\0';  
  •   
  •     return oct;  
  • }  
  •   
  • int main()  
  • {  
  •     char bin[MAX_SIZE];  
  •   
  •     printf("Please input the binary:\n");  
  •     scanf("%s",bin);  
  •   
  •     charchar * oct = bin2oct(bin);  
  •   
  •     printf("The oct of the binary is:%s.\n",oct);  
  •   
  •     return 0;  
  • }  

调试结果为:

[objc] view plain copy


  • Please input the bindary:  
  • 101011101011  
  • The oct of the binary is:05353.  



使用特权

评论回复
板凳
联通移不动|  楼主 | 2017-1-6 12:29 | 只看该作者


例五:二进制数转换成相应的十进制数[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:\n");  
  •     scanf("%s",bin);  
  •   
  •     len = strlen(bin);  
  •   
  •     num = bin2int(bin,len);  
  •   
  •     printf("The integer of the binary is:%d.\n",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] = '\0';  
  •   
  •     return hex;  
  • }  
  •   
  • int main()  
  • {  
  •     int len_bin;  
  •     char bin[MAX_SIZE];  
  •   
  •     printf("Please input the binary:\n");  
  •     scanf("%s",bin);  
  •   
  •     len_bin = strlen(bin);  
  •   
  •     charchar * hex = bin2hex(bin,len_bin);  
  •   
  •     printf("The hex of bin is:%s.\n",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 != '\0')  
  •     {  
  •         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 = '\0';  
  •   
  •     return hex;  
  • }  
  •   
  • int main()  
  • {  
  •     int len_bin;  
  •     char bin[MAX_SIZE];  
  •   
  •     printf("Please input the binary:\n");  
  •     scanf("%s",bin);  
  •       
  •     len_bin = strlen(bin);  
  •     charchar * hex = bin2hex(bin,len_bin);  
  •   
  •     printf("The hex of the binary is:%s.\n",hex);  
  •   
  •     return 0;  
  •   
  • }  


调试结果为:

[objc] view plain copy


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




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

127

帖子

0

粉丝