컴퓨터/알고리즘
[SWEA] 10726. 이진수 표현 (비트마스크),연산자 우선순위
IT황구
2021. 2. 17. 09:36
728x90
반응형
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXRSXf_a9qsDFAXS
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
#include<cstdio>
typedef long long ll;
using namespace std;
int main(void)
{
int size;
ll n,m,t,t2;
scanf("%d",&size);
for(int i = 0; i < size; i++)
{
scanf("%lld %lld",&n,&m);
t = (1<<n)-1;
if( (m&t) == t)
printf("#%d ON\n",i+1);
else
printf("#%d OFF\n",i+1);
}
return 0;
}
해결방법 :
비트마스크를 이용하여 맨 끝에 N자리만 추출해서 2^n-1과 비교한다.
틀렸던것 :
연산자 우선순위가 ==가 &보다 빠르다.
처음에 m & t == t 로 하니까
t == t 를 먼저 하고 m이랑 비교를 한다. 따라서 m&&1을 했던것이다.
저렇게 쓴다는건 첫번째 비트가 켜져있는지 안켜져있는지를 확인한게 되는거다.
아주 운좋게 기본 tc가 맞아서 맞는건줄...
()를 써주어야 올바르게 작동한다.
==END==
728x90
반응형