while (totalNumberOfBits != 0) {
putchar(n >> totalNumberOfBits) & 1;
totalNumberOfBits--;
}
Хорошо, ваш код был довольно близок (и фактически уже распечатывал биты в правильном порядке), однако было 3 небольших ошибки. Во-первых, при компиляции Visual Studio выдает следующее предупреждение:
warning C4552: '&' : operator has no effect; expected operator with side-effect
Он жалуется на часть кода & 1
, которую вы, кажется, случайно поместили за скобки вызова функции putchar
.
while (totalNumberOfBits != 0) {
putchar((n >> totalNumberOfBits) & 1);
totalNumberOfBits--;
}
Вторая ошибка заключается в том, что, хотя теперь он правильно печатает биты, вы печатаете символы \ 0 и \ 1. \ 0 не будет отображаться в консоли, а \ 1, скорее всего, будет выглядеть как смайлик, так что давайте исправим это.
while (totalNumberOfBits != 0) {
putchar(((n >> totalNumberOfBits) & 1) ? '1' : '0');
totalNumberOfBits--;
}
Сейчас это очень близко, осталась только одна маленькая ошибка. Из-за проверки, которую выполняет ваш цикл while, и места, где вы уменьшаете totalNumberOfBits
, вы никогда не проверяете бит на 2 ^ 0, в то время как вы проверяете 2 ^ 8, даже если ваш n
только 8 бит (и, следовательно, диапазона). Таким образом, мы перемещаем декремент и подставляем !=
:
while (--totalNumberOfBits >= 0) {
putchar(((n >> totalNumberOfBits) & 1) ? '1' : '0');
}