while(1) work();
반응형
article thumbnail
while(1)과 while(2) 중 누가 더 빠를까?
알고리즘/TIP 2022. 12. 30. 00:02

개요 while(1)과 while(2) 중 누가 더 빠를까? 당연히 같지 않나? 라는 생각이 들면서도 (variable == 0) 을 판별하려면 variable의 좌측 비트부터 하나씩 확인해보며 모두 0인지 확인해야 하는 것 처럼 while(0b000000000...01) 과 while(0b000000000...10) 이다 보니 좌측에서부터 비트가 0인지 확인하는 원리라면 while(2)가 더 빠를수도 있지 않을까? 싶었다. (while(1)보다 while(2)가 비트 "1"이 더 먼저 나오기 때문에 비교 연산 시 우위를 가져서) 하지만... 최근 C 컴파일러의 성능은 매우 뛰어나기 때문에 최적화로 인해 결국 같은 이진 코드를 가질 것 이라는 가설을 세우고 확인해보았다. 코드와 환경 Ubuntu 20.0..

O(1)로 비트 갯수 세는 알고리즘 세가지
알고리즘/TIP 2022. 2. 27. 15:59

int countBits(unsigned int x) { unsigned int y = x - ((x >> 1) & 033333333333) - ((x >> 2) & 011111111111); return ((y + (y >> 3)) & 030707070707) % 63; } 긴 상수들은 앞에 0이 붙어있으므로 8진수이다. 어지럽다....... 반환문을 아래와 같이 고쳐서 mod연산보다 속도가 빠른 비트연산을 사용할 수도 있다. int countBits(unsigned int x) { unsigned int y = x - ((x >> 1) & 033333333333) - ((x >> 2) & 011111111111); y = ((y + (y >> 3)) & 030707070707); return ((y ..

반응형

검색 태그