2010-03-30 43 views
3

任何人都可以举一个C++代码的例子,它可以很容易地将十进制值转换为二进制值,二进制值转换为十进制值吗?十进制到二进制(反之亦然)

+1

我们谈论的字符串? – 2010-03-30 20:03:49

+0

以什么格式?字符串?数值类型不关心基数,因为它们都以二进制数据的形式存储,不管... – Amber 2010-03-30 20:04:03

+8

名称中的“guru”部分来自哪里? ;-) – mjv 2010-03-30 20:04:49

回答

21

那么,你的问题确实含糊不清,所以这个答案是一样的。

string DecToBin(int number) 
{ 
    if (number == 0) return "0"; 
    if (number == 1) return "1"; 

    if (number % 2 == 0) 
     return DecToBin(number/2) + "0"; 
    else 
     return DecToBin(number/2) + "1"; 
} 

int BinToDec(string number) 
{ 
    int result = 0, pow = 1; 
    for (int i = number.length() - 1; i >= 0; --i, pow <<= 1) 
     result += (number[i] - '0') * pow; 

    return result; 
} 

你应该检查溢出并做输入验证当然。

x << 1 == x * 2

下面是转换为采用了更“编程式”方法,而不是一个“数学类”的做法,缺乏更好的描述的二进制文件(这两个实际上是相同的,虽然从某种意义上说,因为这只是用右移来代替分割,用一个按位递归,用一个循环递归,这是另一种思考它的方式,因为这使得显然你正在提取单独的位)。

string DecToBin2(int number) 
{ 
    string result = ""; 

    do 
    { 
     if ((number & 1) == 0) 
      result += "0"; 
     else 
      result += "1"; 

     number >>= 1; 
    } while (number); 

    reverse(result.begin(), result.end()); 
    return result; 
} 

这里是如何做到在纸上的转换:

  1. Decimal to binary
  2. Binary to decimal
+0

如果我们想要一个固定长度的二进制数,该怎么办?例如,如果我们想要有一个8位表示,那么'1'必须返回为'00000001'。 – Rasoul 2013-09-08 16:10:12

+0

@Rasoul - 然后添加前导零,直到你得到你想要的长度。一些编程语言提供了开箱即用的方法。 – IVlad 2013-09-08 16:13:29

2

strtol会将一个像“011101”这样的二进制字符串转换为内部值(它通常也会以二进制形式存储,但您不需要担心太多)。正常转换(例如operator<<std:cout)将给出相同的十进制值。

1

我假设你想要一个字符串二进制转换?

template<typename T> T stringTo(const std::string& s) 
    { 
     std::istringstream iss(s); 
     T x; 
     iss >> x; 
     return x; 
    }; 

template<typename T> inline std::string toString(const T& x) 
    { 
     std::ostringstream o; 
     o << x; 
     return o.str(); 
    } 

使用这些类似这样的:

int x = 32; 
std:string decimal = toString<int>(x); 
int y = stringTo<int>(decimal); 
2
//The shortest solution to convert dec to bin in c++ 

void dec2bin(int a) { 
    if(a!=0) dec2bin(a/2); 
    if(a!=0) cout<<a%2; 
} 
int main() { 
    int a; 
    cout<<"Enter the number: "<<endl; 
    cin>>a; 
    dec2bin(a); 
    return 0; 

}

相关问题