int isPowerOfTwo(int n) {
return (n && ((n & (n - 1)) == 0));
}
2의 거듭제곱은 가장 왼쪽에 있는 1을 제외하고 뒷부분이 전부 0이라는 걸 고려할 때 위와 같은 코드로 판별할 수 있다.
그리고 어떤 정수를 2의 거듭제곱 수로 나눈 나머지 연산을 해야할 때 성능향상을 위한 최적화 기법으로 %연산이 아니라 &연산을 쓰기도 한다. 위와 같은 논리이다.
#define SOME_NUMBER_POWER_OF_TWO 8
int getRemainder(int n)
{
return n & (SOME_NUMBER_POWER_OF_TWO - 1);
}
'프로그래밍 > C' 카테고리의 다른 글
C언어 ] 맵 자료구조 구현 (0) | 2023.05.07 |
---|---|
C ] float to hex / hex to float Converter (0) | 2023.04.09 |
C ] atoi 함수 구현 (0) | 2023.03.25 |
C ] isalpha, isupper, islower, isdigit, isxdigit, isalnum, isspace, ispunct, isprint, isgraph, iscntrl, isascii, 함수 구현 (0) | 2023.03.25 |
C ] vprintf, vsprintf, vsnprintf 차이 (0) | 2023.02.17 |