以下十进制到二进制转换代码如何工作?

时间:2017-02-21 09:59:51

标签: c++ stl binary type-conversion decimal

我在InterviewBit中遇到了以下用于十进制到二进制转换的C ++代码,如下图所示。

class Solution{

public:
  string findDigitsInBinary(int n){
    string ans;
    if(n == 0) return "0";

    while(n > 0){
      int rem = n % 2;
      ans.push_back((char)('0' + rem));
      n /= 2;
    }

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

我无法理解while循环的第二个语句中发生了什么。

ans.push_back((char)('0' + rem));

以下是我对此代码的解释。

假设我将n的值取为5.

  • 现在,对于while循环的第一次迭代,5> 0

  • rem = 5%2 = 1;

  • 在ans字符串中,将存储'0'+ 1(rem),即“01”。

  • n = 5/2 = 2

  • 现在,对于第二次迭代,2> 0

  • rem = 2%2 = 0

  • ans =“01”(已存储)+'0'+'0'(rem)=> “0100”

  • n = 2/2 = 1

  • 在最后的迭代中,1> 0

  • rem = 1%2 = 1

  • ans =“0100”+'0'+ 1(rem)=> “010001”

  • n = 1/2 = 0

  • 现在,在逆转答案时,它将变为=> 100010但这不是正确的答案。

那么,任何人都可以解释我错在哪里吗?

1 个答案:

答案 0 :(得分:4)

'0' + rem没有按照您的想法执行:'0'char字面值,remint值。将它们添加到一起将导致int表示'0''1'的ASCII值。

更多信息:"Convert an int to ASCII character"