C语言 二进制到十进制程序



我正在练习C的基本程序,并尝试进行二进制到十进制的转换。

下面是我尝试的代码,但它没有产生正确的结果。我不明白我的逻辑哪里出了问题。

/*     binary to decimal     */
#include<stdio.h>
int main()
{
    int a,i,p,sum=0;
    printf("enter binary numbern");
    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("%dn",sum);
    return 0;
}
我输入 1001

并期望 9 是输出,但输出是 1001?

scanf("%u",&a);将读取一个十进制数。因此,当您输入1001时,它将以二进制形式0011 1110 1001,并且在将此数字转换回十进制后,它将变为 100110。您应该将其读取为字符串以保留二进制形式

然后你写的代码只检查输入值的下 5 位。如果输入1001它将按"预期"输出9,因为1001的较低位是01001,这对于 9 来说是意外相同的。输出不是您描述的 1001。这意味着上面的代码不是您运行的原始代码。如果输入另一个数字,结果将有所不同。例如,输入 36 将在输出上打印 4

原因很简单,变量"a"是 int 类型,因此当您将输入作为 1001 提供时,它将成为 1001 的整数而不是编译器的二进制文件,因此您将无法获得正确的结果,不要使用 shift 运算符,尝试一些类似于其他人建议的事情

这应该可以帮助您:

#include<stdio.h>
 int main()
 {
   int a,i,p,sum=0;
   int temp;
   printf("enter binary numbern");
   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("%dn",sum);
  return 0;
 }

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

%u 将十进制字符串解释为整数

,然后尝试将生成的整数值的十进制表示形式解释为二进制。 这不仅令人困惑且有些不合理,还会将您限制为 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( "%dn", 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( "%dn", value ) ;
    return 0 ;
}

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

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

为了计算十进制值,您必须这样做:

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

您需要将 2 提高到 i 的幂。
有关一个很好的示例代码,请参阅此链接:http://www.daniweb.com/software-development/c/threads/307756/binary-to-decimal-conversion-in-c

此代码可用于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;

相关内容

  • 没有找到相关文章

最新更新