모듈로 n 카운터 만들기

  • Post author:
  • Post category:칼럼
  • Post comments:1 Comment
  • Post last modified:October 11, 2013

출처: Great Code 1권: 하드웨어의 이해 본문=3장. \’2진법 연산과 비트 연산\’에서 다룬 주제 중 하나입니다.

모듈로 n(modulo-n) 카운터는 0부터 n-1까지 증가하며, 이후 다시 0으로 돌아간다. 효율적인 모듈로 n 카운터를 만드는 방법을 제시하라.

// C, C++
cntr = (cntr + 1) % n;

가장 흔한 방식이다. 다만 나눗셈은 덧셈 등 기타 연산에 비해 값비싼 연산이다(시간이 많이 걸린다).

// 파스칼
cntr := cntr + 1;
if( cntr >= n ) then
    cntr := 0

코드가 길어졌지만 비교 구문이 나눗셈보단 효율적이다.

// C, C++
// 0x3f = 31 = 2^5 - 1, 따라서 n = 3, m = 5
cntr = (cntr + 1) & 0x3f

AND 연산을 이용해(대부분의 CPU에서 AND 연산이 if 문보다 빠르므로) 세 가지 방식 중 가장 빠르다. 다만, n이 2의 멱수인 경우(n = 2^m – 1)에만 사용가능하다.

글쓴이
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
트위터

This Post Has One Comment

Leave a Reply