넷마스크의 비트수를 계산하는 C함수 .. 좀더 효율적인 방법없을까요?
글쓴이: Iinux / 작성시간: 수, 2010/10/27 - 9:42오후
안녕하세요.. 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;
}
감사합니다.
Forums:
처음부터 bit단위로
처음부터 bit단위로 비교하면 너무 길어지니까, byte단위로 비교하고,
마지막 부분만 비트단위로 비교해보세요.
그런데 저 함수는 자주 불리는건가요?
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
bit count를 빨르게
bit count를 빨르게 하는 방법 생각하다가 찾은 사이트입니다.
http://gurmeetsingh.wordpress.com/2008/08/05/fast-bit-counting-routines/
많은 방법이 있군요 +.+
참고하시면 효율적인 카운팅이 가능 할 듯.
..
..
LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr
답변감사합니다.
=====================
답변 감사합니다.
haze11 님이 알려주신 링크에 가보니.. 다양한 방법이 있군요
생각해보니.. 자주 호출되는게 아니라서
그냥 제가 처음 만든거 쓰는게 좋을거 같습니다. ^^;
감사합니다.
P.S )
비트연산이 너무 복잡하면 가독성이 너무 떨어져서 좀 꺼려지더라구요
(특히.. 매크로까지 넣어가면서 사용한 비트연산들)
가독성이 안좋은 이유는 제가 익숙하지 않기 때문일까요?
=====================
좋은 성능을
좋은 성능을 원하는게 아니라면 가독성 있게 쉽게 짜는게 좋죠.
성능을 추구하다 보면 평범하지 않은 코드가 나오고, 그래서 쉽게 보기 어려운거겠죠.
소프트웨어적 보다는 하드웨어적으로 생각하면 좋은 성능이 나오더라구요.
보통 비트연산이죠. =.=
댓글 달기