2013-01-22 2 views
0

첫 번째 문제는 것이다 :하나 개의 동작에서의 비트 문자열의 첫 번째 활성 비트의 위치를 ​​산출

는 하나 개의 동작에서의 비트 문자열의 첫 번째 활성 비트 위치를 얻을 수 있는가 ?

두 번째 물론 : 어떻게해야합니까? 사전에

감사합니다.

+0

1. 예, 2. 룩업 테이블을 사용하십시오. 제한점은 명백합니다 : 룩업 테이블은 거대해야합니다. – dasblinkenlight

답변

1

정수의 최상위 비트를 가져 오는 프로세서가 단일 명령이지만 일부 프로세서의 이름을 지정할 수 없다는 이야기를 들었습니다. 이러한 프로세서가 있더라도 임의의 2 진수가 아닌 정수 중에서 가장 높은 비트 수만 얻을 수 있습니다. 이는 질문에 해당하는 것으로 보입니다.

더 긴 비트 시퀀스의 경우 각 비트를 확인하는 것보다 더 좋은 옵션이없는 것 같습니다. 짧은 것들은 가장 높은 비트 값을 미리 계산할 수 있습니다 (예 : 모든 숫자에 대해 가장 높은 비트를 저장하는 배열 ~ 32768), 단순히 배열로부터 값을 얻어 모든 15 비트 시퀀스에 필요한 답을 얻을 수 있습니다.

+1

a) x86 어셈블리에서, 'bsr' 명령어는 최상위 비트부터 시작하여 첫 번째 세트 비트를 감지합니다. POSIX에서'ffs()'와'fls()'는 아마도 그러한 명령어로 해석 될 것이고, 없으면 컴파일러는 De Bruijn 시퀀스를 사용하여 비 순진한 소프트웨어 구현을 방출 할 것이다. b) 긴 비트 시퀀스의 경우 각 단어에 대해이 작업을 계속 적용하여 마지막 단어에 0이 올바르게 채워 졌는지 확인하십시오. –