2010-05-10 2 views
0

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

ответ

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++

+0

Спасибо за ссылку тоже –

+1

@ Oni-кун, C++ имеет гораздо больше, чтобы предложить, если вы посмотрите на него, decbin не все, что отличных от этих решений. – Nullw0rm

+2

Имя параметра 'int decimal' не имеет смысла. Числа не являются по сути десятичными, это просто цифры. (Фактически, они всегда хранятся в двоичной форме внутри.) – fredoverflow

0

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

1

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

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);   
} 
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; 
} 

, конечно, это не слишком architucture дружелюбен, но он избегает COUT, просто упаковывают вы не с помощью консоли. он также выводится в любом порядке бит.

+0

Возможно, добавьте последнюю строку с чем-то вроде 'return sBin.size()? sBin: «0» ', чтобы отобразить' 0'. – Tshepang

0

Как и @Necrolis, ответьте без необходимости в if, и разворот строки.

string decimalToBinary(int decimal) { 
    string binary; 
    while(decimal) { 
     binary.insert(0, 1, (decimal & 1) + '0'); 
     decimal >>= 1; 
    } 
    return binary; 
} 
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; 
} 
Смежные вопросы