如何将十进制转换为二进制?

时间:2010-05-10 10:18:50

标签: c++ binary decimal

我真正知道的是PHP和我使用decbin函数等,这很容易做到。在这个C ++程序中,我想做同样的事情,只是一个简单的数字或字符串,我该怎么做?

7 个答案:

答案 0 :(得分:3)

可以定义一个简单的函数,例如:

void binary(int decimal) {
   int remainder;

   if(decimal <= 1) {
       std::cout << decimal;
       return;
   }
   remainder = decimal % 2;
   binary(decimal >> 1);    
   std::cout << remainder;
}

虽然网上有很多其他资源可以解决这个问题。

这里有一个关于它效率的值得注意的问题,因为你可能想要的不仅仅是: Efficiently convert between Hex, Binary, and Decimal in C/C++

答案 1 :(得分:2)

您可以使用以下内容非递归地执行此操作:

std::string Dec2Bin(int nValue, bool bReverse = false)
{
    std::string sBin;  
    while(nValue != 0)
    {
       sBin += (nValue & 1) ? '1' : '0';
       nValue >>= 1;
    }

    if(!bReverse)        
        std::reverse(sBin.begin(),sBin.end());

    return sBin;
}

当然这不是架构友好,但它避免了cout,只是因为你不使用控制台。它也以任何位排序输出。

答案 2 :(得分:1)

如果编译器上有itoa,则可以使用{{3}}。只需记住它不是标准,如果您需要标准方法,最好使用已发布的其他解决方案。

答案 3 :(得分:0)

如果要打印,只需使用此代码here即可。如果要返回一个字符串,而不是使用cout,请改为附加到C ++字符串。

答案 4 :(得分:0)

提供迭代方法(请原谅#defines(但我很确定它们将被编译为表达式的值),我不太清楚C中预定义的宏/常量:

#define INT_ARCH 32
#define ARCH_SHIFTABLE (INT_ARCH - 1)
#define ARCH_MAX_INT 1 << ARCH_SHIFTABLE

void dec_to_bin(int decimal)
{                
    int shifter = ARCH_MAX_INT;

    for(; shifter > 0; shifter >>= 1)
        cout << (decimal & shifter);        
}

答案 5 :(得分:0)

类似于@Necrolis的答案,不需要if和字符串的反转。

string decimalToBinary(int decimal) {
  string binary;
  while(decimal)  {
      binary.insert(0, 1, (decimal & 1) + '0');
      decimal >>= 1;
  }
  return binary;
}

答案 6 :(得分:0)

用c ++中的简单方法

#include <iostream>
using namespace std;
int main()
{
long n, rem, binary=0, i=1;
cout<<"Enter a int: ";
cin>>n;

 while(n != 0) 
   {
        rem = n%2;      
        n = n/2;        
        binary= binary + (rem*i); 
        i = i*10;
    }
cout<< "\nAns:   "<<binary <<endl;

return 0;
}