C++에서 1은 부호있는 32비트 상수로 취급한다.

아래 코드는 부호없는 64비트마스크 a의 b번 비트가 켜져 있는지 확인하기 위한 잘못된 코드이다.

bool isBitSet(unsigned long long a, int b) {
	return (a & (1 << b)) > 0;
}

왜 잘못된 코드인걸까?

: C++에서 1은 부호있는 32비트 상수로 취급되기 때문에 b가 32이상이면 식 (1 << b)에서 오버플로가 발생한다.

따라서, 이 문제를 해결하기 위해서는 1 뒤에 이 상수가 부호 없는 64비트 정수임을 알려주는 접미사 ull을 붙여 주어야한다.

bool isBitSet(unsigned long long num, unsigned int bit) {
    return (num & (1ULL << bit)) != 0;
}