Как бы я преобразовал десятичную в двоичную? - PullRequest
0 голосов
/ 10 мая 2010

Все, что я действительно знаю, это PHP, и я использовал функцию decbin и т. Д. Это было довольно легко сделать. В этой программе на C ++ я хочу сделать то же самое, просто простое число или строку, как бы я это сделал?

Ответы [ 7 ]

3 голосов
/ 10 мая 2010

Можно определить простую функцию, например:

void binary(int decimal) {
   int remainder;

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

Хотя в Интернете есть много других ресурсов о том, как это сделать ..

Здесь стоит отметить вопрос эффективности, так как вы можете захотеть большего: Эффективное преобразование между шестнадцатеричным, двоичным и десятичным в C / C ++

2 голосов
/ 10 мая 2010

вы можете сделать это не рекурсивно, используя что-то вроде этого:

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, только если вы не используете консоль. он также выводит в любом порядке следования битов.

1 голос
/ 10 мая 2010

Вы можете использовать itoa, если это доступно на вашем компиляторе.Просто запомните , это не стандарт , и если вам нужен стандартный метод, лучше использовать другие опубликованные решения.

0 голосов
/ 15 января 2016

Делай простым способом на с ++

#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;
}
0 голосов
/ 30 июля 2013

Аналогично ответу @Necrolis без необходимости использования оператора if и обращения строки.

string decimalToBinary(int decimal) {
  string binary;
  while(decimal)  {
      binary.insert(0, 1, (decimal & 1) + '0');
      decimal >>= 1;
  }
  return binary;
}
0 голосов
/ 10 мая 2010

предлагая итеративный подход (простите #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);        
}
0 голосов
/ 10 мая 2010

Если вы хотите распечатать его, просто используйте этот код здесь .Если вы хотите вернуть строку, вместо использования cout, добавьте вместо нее строку C ++.

...