Ваша реализация должна добавить 1 в старшем значащем бите при смещении вправо отрицательного числа (поведение оператора определяется реализацией, поэтому обычно зависит от того, какие инструкции процессора доступны).
0xA0 = 1010 0000 binary
первый раз, когда вы производите выборку c & 1
- младший значащий бит - на самом деле это 0. Затем ...
c = (c >> 1)
... сдвигает это значение до 1101 0000, затем 1110 1000, 1111 0111, 1111 1011,1111 1101, 1111 1110, 1111 1111 - который тогда стабилен и никогда не меняется дальше.Следовательно, вы продолжаете печатать 1 с и никогда не удовлетворяете условию завершения c == 0.
Когда я печатаю цикл, он никогда не прерывается и только печатает?Как получилось?
Ну, в самом начале он напечатает несколько нулей, но ваш экран, вероятно, прокручивается мимо них в мгновение ока, и после этого вы видите только 1.