반응형
출처: http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2583&sca=50
Approach
(1) a가 홀수인지 if문과 비트 연산자를 이용하여 판별하고자 한다. ?자리에 들어갈 비트연산자는?
if(a ? 1){} // c, c++인 경우
if((a ? 1) == 1 )) {} // java의 경우
if(a & 1){}
if((a & 1) == 1 )) {}
(2) a가 짝수인지 if문과 비트 연산자를 이용하여 판별하고자 한다. ?자리에 들어갈 비트연산자는?
if(?a ? 1) {} // c, c++인 경우
if((?a ?1) == 1 )) {} // java의 경우
if(~a & 1) {}
if((~a & 1) == 1 )) {}
(3) a와 2의 k제곱을 곱한 결과(결과는 int 범위를 넘지 않는다.)를 구하고자 한다. ?자리에 들어갈 비트연산자는?
result = a ? k;
result = a << k;
(4) a를 2의 k제곱으로 나눈 몫 p와 나머지 r 을 구하고자 한다. ?자리에 들어갈 비트연산자들은?
p = a ? k, r = a ? ((1 ? k) - 1);
p = a >> k, r = a & ((1 << k) - 1);
(5) 다음은 a와 b의 값을 서로 바꾸는 코드이다. ?자리에 들어갈 비트연산자들은?
a = a ? b, b = a ? b, a = a ? b;
a = a ^ b, b = a ^ b, a = a ^ b;
ex) a = 10 = 1101
b = 15 = 1011
(6) a의 k번째(2의 k제곱 자리) 비트가 0인지 1인지 알아보고자 한다. ?자리에 들어갈 비트연산자들은?
result = (a ? k) ? 1;
result = (a >> k) & 1;
(7) a의 k번째(2의 k제곱 자리) 비트만 0으로 바꾸고자 한다. ?자리에 들어갈 비트연산자들은?
a = a ? (?(1 ? k));
a = a & (~(1<<k));
(8) a의 k번째(2의 k제곱 자리) 비트만 0이면 1로, 1이면 0으로 바꾸고자 한다. ?자리에 들어갈 비트연산자들은?
a = a ? (1 ? k);
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);
result = a & ( a - 1 )
(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);
bit = a ^ b;
result = bit & (bit -1);
더보기
LS1B (Least Set 1 Bit : 2^0 부터 시작하여 처음만나는 1인비트의 가중치값)를구하고자한다.
?자리에들어갈비트연산자는? (ex, 1, 5, 6 등의 LSB는 1이고, 2, 6, 10 등의 LSB는 2이다.)
lsb= a ? a;
printf("%d 's LSB is % n", a, lsb );
LSB = a & -a;
ex) 74 = 01001010
-74 = 10110101 → 10110110 (비트 반전 후 + 1)
→ 01001010 & 10110110 ▶ 뒤(맨 끝)에서 『1』인 부분에서 서로 일치
따라서 LSB = 102 = 210
#include <stdio.h>
char op[7][4] = { "?", "~", "&", "|", "^", "<<", ">>" };
// 0 1 2 3 4 5 6
int main(){
printf("%s\n", op[2]); // (1)
printf("%s%s\n", op[1], op[2]); // (2)
printf("%s\n", op[5]); // (3)
printf("%s%s%s\n", op[6], op[2], op[5]); // (4)
printf("%s%s%s\n", op[4], op[4], op[4]); // (5)
printf("%s%s\n", op[6], op[2]); // (6)
printf("%s%s%s\n", op[2], op[1], op[5]); // (7)
printf("%s%s\n", op[4], op[5]); // (8)
printf("%s\n", op[2]); // (9)
printf("%s%s\n", op[4], op[2]); // (10)
}
반응형
'PS 문제 풀이 > Jungol' 카테고리의 다른 글
[Jungol] 정올 3701 queue api (0) | 2021.03.18 |
---|---|
[Jungol] 정올 1102 스택(stack) (0) | 2021.03.18 |
[Jungol] 정올 3101 요세푸스 문제 1 (0) | 2021.03.18 |
[Jungol] 정올 1337 달팽이 삼각형 (0) | 2021.03.17 |
[Jungol] 정올 1641 숫자삼각형 (0) | 2021.03.17 |
댓글