2014-11-29 2 views
0
나는 다음과 같은 기능을 공부하고

이해하려고 노력 :인라인 함수

inline xint dtally(xint x) 
{ 
    xint t = 0; 
    while (x) t += 1 << ((x % 10) * 6), x /= 10; 
    return t; 
} 

난 그냥하고 변수 t에 저장 계산해서이 기능 즉하게 알고 싶어합니다.

+3

"이 기능을 만드는 이유"란 무엇을 의미합니까? –

+0

@Deduplicator - 예, 그냥 가서 확인했습니다. 댓글이 취소되었습니다. –

+1

xint는 무엇입니까? 우리가 그 세부 사항을 안다면, 우리는 당신의 질문에 대답 할 수 있습니다. – user3629249

답변

2

이 코드는 x의 기본 10 진수를 t에 6 개의 비트 필드로 구분하여 계산합니다.

각 시프트 길이는 6의 배수입니다. 따라서 숫자가 0이면 시프트는 0이고, 숫자가 1이면 시프트는 6, 숫자가 9이면 시프트는 54입니다.

6이 사용 된 이유는 64 비트 이하로 적합하다고 생각됩니다.

+0

x의 10 진수를 가능한 10 진수로 계산합니다. 즉, 출력의 각 6 비트 폭 필드는 그 오프셋 (offset)에 대응하는 숫자의 카운트를 x에 보관 유지합니다. 비트 0-5는 0의 수, 비트 6-11은 1의 수, 12-17은 2의 수 등을 보유합니다. – tvanfosson