二进制到十进制程序

时间:2013-10-20 13:44:23

标签: c

我正在练习C的基本程序,并尝试进行二进制到十进制转换。 下面是我尝试的代码,但它没有产生正确的结果。我无法理解我的逻辑出错的地方。

  /*     binary to decimal     */
 #include<stdio.h>
 int main()
 {
   int a,i,p,sum=0;
   printf("enter binary number\n");
   scanf("%u",&a);
   for(i = 0 ; i < 5; i++)  /* Taking only 5 digits in binary */
   {
     if((a  & 1<<i)) 
      { 
        p = 1<<i;        
        sum = sum +p;
      }
   }

  printf("%d\n",sum);
  return 0;
 }

我输入了1001并且期望9是输出,但输出是1001 ??

6 个答案:

答案 0 :(得分:1)

scanf("%u",&a);将读取十进制数字。因此,当您输入1001时,它将是0011 1110 1001二进制文件。因此,将此数字转换回十进制后,它将变为1001 10

您应该将其读作字符串以保留二进制格式

另一个问题是你编写的代码实际上只转换输入值的低5位。因此,如果您输入1001,它将输出9,因为1001的低位是01001,这对于9而言意外相同。但是如果您输入另一个数字,结果将是与众不同。例如,输入36将在输出上打印4。您应该复制原始代码,而不是重新输入

答案 1 :(得分:0)

这些行是错误的(我认为......):

p = 1<<i;
sum = sum +p;

为了计算小数值,你必须这样做:

p= pow(2,i);
sum = sum+p;

你需要加强2的力量 请参阅此链接以获取一个好示例代码: http://www.daniweb.com/software-development/c/threads/307756/binary-to-decimal-conversion-in-c

答案 2 :(得分:0)

原因非常简单,变量'a'的类型为int,因此当您将输入提供为1001时,它变为1001的整数而不是编译器的二进制,因此您将无法获得正确的结果,请勿使用移位运算符,尝试类似其他人建议的东西

答案 3 :(得分:0)

这可以帮到你:

#include<stdio.h>
 int main()
 {
   int a,i,p,sum=0;
   int temp;

   printf("enter binary number\n");
   scanf("%d",&a);

   for(i = 0 ; i<5; i++)  /* Taking only 5 digits in binary */
   {
    temp=a % 10;
     a = a/10;

     p = temp<<i;
     sum = sum +p;
   }

  printf("%d\n",sum);
  return 0;
 }

答案 4 :(得分:0)

您最好将输入作为字符串,并从该字符串的结尾开始添加1位数的位置值。

%u将 decimal 字符串解释为整数,然后尝试将结果整数值的十进制表示形式解释为二进制。这不仅令人困惑,而且有点不合理,它会将你限制在10位二进制数字。

考虑一下:

/*     binary to integer     */
#include <stdio.h>
#include <string.h>

int main()
{
    int pv = 1 ;
    int value = 0 ;
    char bin[33] ;

    printf("Enter binary number: ");
    scanf("%32s", bin ) ;

    for( int i = strlen( bin ) - 1; i >= 0; i-- )
    {
         if( bin[i] == '1' )
         {
             value += pv ;
         }

         pv *= 2 ;
    }

    printf( "%d\n", value ) ;

    return 0 ;
}

另请注意,此处发生的事情是转换为十进制,而是转换为整数。所有值都以二进制形式存储在内部,如果您选择输出整数值的十进制字符串表示,则它只是十进制。

利用整数的内部二进制表示的上述可能更有效的版本是:

/*     binary to integer     */
#include <stdio.h>
#include <string.h>

int main()
{
    int pv = 1 ;
    int value = 0 ;
    char bin[33] ;

    printf("Enter binary number: ");
    scanf("%32s", bin ) ;

    for( int i = strlen( bin ) - 1; i >= 0; i-- )
    {
         if( bin[i] == '1' )
         {
             value |= pv ;
         }

         pv <<= 1 ; ;
    }

    printf( "%d\n", value ) ;

    return 0 ;
}

答案 5 :(得分:-1)

此代码可以在C ++中使用:

string str = "1001";
int temp = 0;
for(int c=0;c<str.length();c++){

      int v = atoi( str.substr(c,1).c_str() );
      temp=temp+(v*(pow (2, str.length()-c-1)));

}

cout << temp;