それで...コードの出力をチェックして、それが機能しない理由を理解しましたか?
So iteration 1 of your loop:
value = 192
i = 4
output[i] = (11000000 & 1) + '0' = 0 + 48 = 48 (char `0`)
Iteration 2 of your loop:
value = 96
i = 3
output[i] = (1100000 & 1) + '0' = 0 + 48 = 48 (char `0`)
Iteration 3 of your loop:
value = 48
i = 2
output[i] = (110000 & 1) + '0' = 0 + 48 = 48 (char `0`)
Iteration 4 of your loop:
value = 24
i = 1
output[i] = (11000 & 1) + '0' = 0 + 48 = 48 (char `0`)
Iteration 5 of your loop:
value = 12
i = 0
output[i] = (1100 & 1) + '0' = 0 + 48 = 48 (char `0`)
Final string: "00000" and you wanted: "11000000"
コードに何か問題がありますか? いいえ。私もあなたは十分に行きませんでした。出力/ループを次のように変更します。
output[8] = '\0';
for (i = 7; i >= 0; --i, value >>= 1)
そして、正しい結果が返されます。
より一般的なアプローチをお勧めします。固定長の文字列を使用しているため、特定の長さの 2 進数に制限されます。次のようなことをしたいかもしれません:
loop while number dividing down is > 0
count number of times we loop
malloc an array the correct length and be returned