2진수->10진수 변환 시, 성능이 제일 빠른 방법
글쓴이: hoollahoop / 작성시간: 월, 2005/10/10 - 3:12오후
성능을 최우선으로 고려해서 2진수->10진수로
변환하고 싶습니다.
별 방법이 없나요?
10진수->2진수일때는 비트연산쓰면 되는데..
2진수->10진수일때는 비트연산이 가능한가요?
잘 모르겠습니다.
그냥 단순히 자리수 세서 2^4 * 1 + 2^2 * 1 ... 이런식으로
해야하는 방법밖에 없는지..
좋은 방법 있으면 좀 알려주세요 ^^
Forums:
비트연산 가능합니다.2진수 11010101 라고 하면,[code:
비트연산 가능합니다.
2진수 11010101 라고 하면,
tmp = (1 << 7) | (1 << 6) | (0 << 5) | (1 << 4) | (0 << 3) | (1 << 2) | (0 << 1) | (1 << 0)
이런 식으로 하시면 될 것 같아요~
컴파일러가 얼마나 최적화를 해주느냐에 따라 달라지겠지만, 1 * 2^4 보단 (1 << 4) 가 더 빠르지 않을까 하는 생각을;;
훗, 못 믿겠나?
8 Bit이하라는 전제 조건이 있다면그리고 메모리가 상관 없다면l
8 Bit이하라는 전제 조건이 있다면
그리고 메모리가 상관 없다면
lookup table 이 가장 빠를것 같군요.
Re: 2진수->10진수 변환 시, 성능이 제일 빠른 방법
변환의 시점이 컴파일 시점이느냐 (예를 들어서 BIT(10110011)같이 쓰고 알아서 179라고 변환해 주는...) 아니면 실행 시점(30이라는 숫자를 주면 "11110"이라는 문자열로 변환하는...)이냐에 따라서 상황이 다를 것 같습니다. 좀 더 자세히 질문을 적어 주세요.
- 토끼군
덤: 매크로 얘기라면 http://bbs.kldp.org/viewtopic.php?p=160414#160414 를 참고하시길...
int bin2dec(const char * str){ in
int bin2dec(const char * str)
{
int ret = 0;
while (*str)
{
ret *= 2;
if ( *str == '1' ) { ret += 1; }
}
return ret;
}
char *str = "11010101";
printf("%d", bin2dec(str));
앗차차 좀 틀렸군요int bin2dec(const char * s
앗차차 좀 틀렸군요
int bin2dec(const char * str)
{
int ret = 0;
while (*str)
{
ret *= 2;
if ( *str == '1' ) { ret += 1; }
++str;
}
return ret;
}
char *str = "11010101";
printf("%d", bin2dec(str));
c++로 작성하시고, 변환이 컴파일타임이라면 템플릿 메타프로그래밍을 쓰면
c++로 작성하시고, 변환이 컴파일타임이라면 템플릿 메타프로그래밍을 쓰면 되겠군요.
C++ template metaprogramming의 예제
댓글 달기