2016-11-30 75 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對象。