프로그래밍의 기초(의사 코드 트레이스)

∧는 비트별 논리곱을 나타낸다. 다음 프로그램을 실행한 후의 c의 값은?

integer: x ← 200, c ← 0
while (x ≠ 0)
  x ← x ∧ (x − 1)
  c ← c + 1
endwhile
  1. A3
  2. B5
  3. C8
정답과 해설 보기

정답: A. 3

x ∧ (x − 1)이라는 비트 연산은 x의 가장 아래에 있는 1인 비트를 0으로 만듭니다. x − 1에서는 최하위의 1이 0이 되고 그보다 아래의 0이 모두 1이 되므로, 논리곱을 취하면 그 부분만 0이 되기 때문입니다. 200 = 11001000은 11000000 = 192, 10000000 = 128, 0으로 바뀌어 반복은 3회입니다. c는 x를 2진수로 나타냈을 때의 1의 개수가 됩니다.

이 분야 연습하기 분야로 돌아가기

프로그래밍의 기초(의사 코드 트레이스)의 다른 문제

  1. x와 y는 8비트 부호 없는 정수라고 한다. <<와 >>는 논리 시프트이며, 빈 비트에는 0이 들어가고 8비트를 넘친 비트는 버린다. ∨는 비트별 논리합을 나타낸다. x가 75일 때, 다음 대입을 실행한 후의 y의 값은?
  2. 다음 프로시저 bubble은 정수형 배열 data를 오름차순으로 정렬하는 버블 정렬이다. swap(data, j, k)는 data[j]와 data[k]의 값을 교환하는 프로시저이며, 배열의 인덱스는 1부터 시작한다. 프로그램 중의 【a】에 들어갈 것은?
  3. ÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 프로그램은 오름차순으로 정렬된 정수형 배열 data(인덱스는 1부터 시작)에서 x 이상인 값이 처음 나타나는 인덱스를 lo에 구한다. x는 data의 마지막 요소 이하라고 한다. 프로그램 중의 【a】에 들어갈 것은?
  4. 요소 수 5인 정수형 배열 st와 정수형 변수 top으로 스택을 나타낸다. st의 요소는 모두 0, top은 0에서 시작한다. push(v)는 top에 1을 더한 후 st[top] ← v를 수행하고, pop()은 st[top]의 값을 반환한 후 top에서 1을 뺀다(st의 요소는 바꾸지 않는다). 다음 프로그램을 실행한 후의 top과 st의 조합은?
  5. 요소 수 4인 문자열형 배열 q를 원형으로 사용하는 큐가 있다. head와 tail의 초기값은 1이며, enq(v)는 q[tail] ← v 다음에 tail ← tail mod 4 + 1을 수행하고, deq()는 q[head]의 값을 반환한 다음에 head ← head mod 4 + 1을 수행한다. 다음 프로그램을 실행했을 때 "E"가 저장되는 q의 요소는?