문제
비트연산(Bitwise Operation)은 한 개 또는 두 개의 이진수에 대하여 비트단위로 적용되는 연산이다.
다음은 6가지 비트 연산자에 대한 설명이다.
위 6개 비트 연산자를 사용하여 아래 질문에 답하시오.
질문에 사용된 모든 변수는 음이 아닌 정수이다.
문항별 사용되는 비트연산자는 1개를 초과할 수 있다.
(1) a가 홀수인지 if문과 비트 연산자를 이용하여 판별하고자 한다. ?자리에 들어갈 비트연산자는?
if(a ? 1){} /// c, c++인 경우
if((a ?1) == 1 )) {} /// java의 경우
if a ? 1: # python의 경우
(2) a가 짝수인지 if문과 비트 연산자를 이용하여 판별하고자 한다. ?자리에 들어갈 비트연산자는?
if(?a ? 1) {} /// c, c++인 경우
if((?a ?1) == 1 )) {} /// java의 경우
if ?a ? 1: # python의 경우
(3) a와 2의 k제곱을 곱한 결과(결과는 int 범위를 넘지 않는다.)를 구하고자 한다. ?자리에 들어갈 비트연산자는?
result = a ? k;
(4) a를 2의 k제곱으로 나눈 몫 p와 나머지 r 을 구하고자 한다. ?자리에 들어갈 비트연산자들은?
p = a ? k, r = a ? ((1 ? k) - 1);
p, r = a ? k, a ? ((1 ? k) - 1) # python의 경우
(5) 다음은 a와 b의 값을 서로 바꾸는 코드이다. ?자리에 들어갈 비트연산자들은?
a = a ? b, b = a ? b, a = a ? b;
a = a ? b; b = a ? b; a = a ? b; # python의 경우
(6) a의 k번째(2의 k제곱 자리) 비트가 0인지 1인지 알아보고자 한다. ?자리에 들어갈 비트연산자들은?
result = (a ? k) ? 1;
(7) a의 k번째(2의 k제곱 자리) 비트만 0으로 바꾸고자 한다. ?자리에 들어갈 비트연산자들은?
a = a ? (?(1 ? k));
(8) a의 k번째(2의 k제곱 자리) 비트만 0이면 1로, 1이면 0으로 바꾸고자 한다. ?자리에 들어갈 비트연산자들은?
a = a ? (1 ? k);
(9) a가 2의 제곱수인지 판별하고자 한다. ?자리에 들어갈 비트연산자들은?
result = a ? (a - 1);
if( a > 0 && result==0) printf("%d is the power of 2.\n", a);
if a > 0 && result==0: print("%d is the power of 2." % (a)) # python의 경우
(10) a와 b의 같은 자리 비트를 비교한 결과 서로 다른 비트가 1개 이하인지 알아보고자 한다.
?자리에 들어갈 비트연산자들은?
bit = a ? b; result = bit ? (bit -1);
if(result==0) printf("%d and %d differ by below 1bit.\n", a, b);
if result==0: print("%d and %d differ by below 1bit." % (a, b)); # python의 경우
위 질문에 대하여 아래 코드의 op[0]에서 0위치에 적절한 비트 연산자 번호를 작성하여 제출한다.
C
#include <stdio.h>
char op[7][4] = {"?", "~", "&", "|", "^", "<<", ">>"};
int main(){
printf("%s\n", op[0]); /// (1)
printf("%s%s\n", op[0], op[0]); /// (2)
printf("%s\n", op[0]); /// (3)
printf("%s%s%s\n", op[0], op[0], op[0]); /// (4)
printf("%s%s%s\n", op[0], op[0], op[0]); /// (5)
printf("%s%s\n", op[0], op[0]); /// (6)
printf("%s%s%s\n", op[0], op[0], op[0]); /// (7)
printf("%s%s\n", op[0], op[0]); /// (8)
printf("%s\n", op[0]); /// (9)
printf("%s%s\n", op[0], op[0]); /// (10)
return 0;
}
Python
op = ["?", "~", "&", "|", "^", "<<", ">>"]
print(op[?]) # (1)
print(op[?], op[?], sep="") # (2)
print(op[?]) # (3)
print(op[?], op[?], op[?], sep="") # (4)
print(op[?], op[?], op[?], sep="") # (5)
print(op[?], op[?], sep="") # (6)
print(op[?], op[?], op[?], sep="") # (7)
print(op[?], op[?], sep="") # (8)
print(op[?]) # (9)
print(op[?], op[?], sep="") # (10)
출력
만약 모든 답이 ?라면 출력예와 같이 출력된다.
예제1
?
??
?
???
???
??
???
??
?
??