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


역링크 공식 문제집만

로그인해야 코드를 작성할 수 있어요.