본문 바로가기
컴퓨터/알고리즘

[SWEA] 10726. 이진수 표현 (비트마스크),연산자 우선순위

by IT황구 2021. 2. 17.
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
반응형