我真正知道的是PHP和我使用decbin
函数等,这很容易做到。在这个C ++程序中,我想做同样的事情,只是一个简单的数字或字符串,我该怎么做?
答案 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;
}