28.10 연습문제: while 반복문 사용하기

다음 소스 코드를 완성하여 정수 1, 2, 4, 8, 16, 32, 64, 128이 각 줄에 출력되게 만드세요.

practice_while.c

#include <stdio.h>

int main()
{
    unsigned char i = 1;
    while (_______)
    {
        printf("%u\n", i);
        i <<= 1;
    }
    return 0;
}

실행 결과

1
2
4
8
16
32
64
128

정답

i != 0

해설

변수 i의 비트를 왼쪽으로 이동시키면서 값을 출력하고 있습니다. 여기서 i가 1바이트(8비트) 크기이므로 최하위 비트의 1을 왼쪽으로 7번 이동시키면 최상위 비트로 오게 되고 128이 됩니다.

0000 0001(1)
0000 0010(2)
... (생략)
1000 0000(128)

1000 0000의 1을 한 번만 왼쪽으로 더 이동시키면 0000 0000이 됩니다. 따라서 while 반복문의 조건식을 i != 0와 같이 지정해주면 0이 아닐 때 계속 반복하다가 0이되면 반복을 끝내므로 1, 2, 4, 8, 16, 32, 64, 128을 출력할 수 있습니다.