十进制到二进制在C ++中签名

时间:2017-01-31 03:02:39

标签: c++

这就是我所拥有的:

string decimal_to_binary(int n){
string result = "";
while(n > 0){
    result = string(1, (char) (n%2 + 48)) + result;
    n = n/2;
}
return result; }

这样可行,但如果我输入一个负数,任何帮助它都不起作用?

3 个答案:

答案 0 :(得分:2)

只需

b

然后使用 bitset to_string 将int转换为字符串

#include <bitset>

它也适用于负数。

答案 1 :(得分:1)

我会建议为负数调用一个单独的函数。鉴于此,例如,-1和255都将返回11111111.从正数转换为负数将是最简单的,而不是完全改变逻辑来处理两者。

从正二进制到负数只是运行XOR并加1。

您可以像这样修改代码以便快速修复。

string decimal_to_binary(int n){
    if (n<0){ // check if negative and alter the number
        n = 256 + n;
    }
    string result = "";
    while(n > 0){
        result = string(1, (char) (n%2 + 48)) + result;
        n = n/2;
    }
    return result;
}

答案 2 :(得分:0)

  

这样可行,但如果我输入一个负数,任何帮助它都不起作用?

检查数字是否为负数。如果是,请使用-n再次调用该函数并返回连接结果。

除非要在输入为0时返回空字符串,否则还需要添加一个子句来检查0。

std::string decimal_to_binary(int n){
   if ( n < 0 )
   {
      return std::string("-") + decimal_to_binary(-n);
   }

   if ( n == 0 )
   {
      return std::string("0");
   }

   std::string result = "";
   while(n > 0){
      result = std::string(1, (char) (n%2 + 48)) + result;
      n = n/2;
   }
   return result;
}