넷마스크의 비트수를 계산하는 C함수 .. 좀더 효율적인 방법없을까요?

Iinux의 이미지

안녕하세요.. C언어 함수를 하나 만들고 있는데요

넷마스크가 255.255.255.0 이면 넷마스크 비트수는 24인데요

"255.255.255.0" 을 (숫자로 바꿔서)
제가 만든 함수의 입력으로 넣으면 24를 리턴합니다.

저는 아래와 같이 만들어봤는데요..좀더 효율적인 방법없을까요?

int get_netmask_bitcnt(int addr_num)
{
int nbit = 1;
while( !(addr_num & (1 << nbit)) ) { nbit++; }
return nbit-1;
}

감사합니다.

mithrandir의 이미지

처음부터 bit단위로 비교하면 너무 길어지니까, byte단위로 비교하고,
마지막 부분만 비트단위로 비교해보세요.

그런데 저 함수는 자주 불리는건가요?

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

haze11의 이미지

bit count를 빨르게 하는 방법 생각하다가 찾은 사이트입니다.
http://gurmeetsingh.wordpress.com/2008/08/05/fast-bit-counting-routines/
많은 방법이 있군요 +.+
참고하시면 효율적인 카운팅이 가능 할 듯.

magingax의 이미지

..

LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr

Iinux의 이미지

=====================
답변 감사합니다.
haze11 님이 알려주신 링크에 가보니.. 다양한 방법이 있군요

생각해보니.. 자주 호출되는게 아니라서
그냥 제가 처음 만든거 쓰는게 좋을거 같습니다. ^^;

감사합니다.

P.S )
비트연산이 너무 복잡하면 가독성이 너무 떨어져서 좀 꺼려지더라구요
(특히.. 매크로까지 넣어가면서 사용한 비트연산들)
가독성이 안좋은 이유는 제가 익숙하지 않기 때문일까요?

=====================

haze11의 이미지

좋은 성능을 원하는게 아니라면 가독성 있게 쉽게 짜는게 좋죠.
성능을 추구하다 보면 평범하지 않은 코드가 나오고, 그래서 쉽게 보기 어려운거겠죠.
소프트웨어적 보다는 하드웨어적으로 생각하면 좋은 성능이 나오더라구요.
보통 비트연산이죠. =.=