2016-11-30 69 views
1

方法十进制转换成二进制:十进制转换为二进制输出

string toBinary(unsigned int n) { 

char binary[33] = {0}; // char array with 0 value in each index 
int ix = 32; 

do { 
    binary[--ix] = '0' + n % 2; // adding remainder to specific index 
    n /= 2; // dividing n with 2 
} while (n); // loop until n is not equal to 0 

// return a string 
return (binary + ix); // but unable to understand this line 
} 

任何人都可以请解释发生了什么事就在这里return (binary + ix);

+0

http://web.math.princeton.edu/math_alive/1/Lab1/Conversion.html –

+0

感谢重播球员。您可以请稍微解释一下 –

+0

小评论:'int'不一定是32位,这里假设。更大的数字在这里会产生奇怪的效果。解决方案是使用'sizeof(int)* CHAR_BIT'而不是32。 – stefaanv

回答

2

ix是一个索引char阵列。该函数创建从其最右边位开始的二进制字符串,靠近数组的末尾,并朝向数组的开头逐步创建每个位。

因此,当最后一位被创建时,ix指向第一个最高位的索引。它并不总是在数组的开始处:特别是如果少于32位,则不会。

“binary + ix”将索引添加到缓冲区起始位的第一位,计算指向第一位的指针。由于该函数返回std::string,因此将其提供给std::string的构造函数,该构造函数将指针指向一个文字字符串并隐式地构造一个完整的std::string对象。

相关问题