페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#3293
스페셜 저지

비트연산 1 1초 4MB

문제

비트연산(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

출력
?

??
?
???
???
??
???
??
?
??


출처

comkiwer

역링크