할 수 있는 방법의 개수를 설정 비트 단위에서 specman?

StackOverflow https://stackoverflow.com/questions/435188

  •  10-07-2019
  •  | 
  •  

문제

을 계산한의 번호를 설정 비트 단위에서 Specman:

var x: uint;
gen x;
var x_set_bits: uint;
x_set_bits = ?;

최선의 방법은 무엇일까요?

도움이 되었습니까?

해결책

나는 Specman을 알지 못하지만, 내가 본 또 다른 방법은 약간 치즈 맛이지만 효율적인 경향이 있습니다. 256 요소 배열을 유지하십시오. 배열의 각 요소는 해당 값에 해당하는 비트 수로 구성됩니다. 예를 들어 (pseudocode) :

bit_count = [0, 1, 1, 2, 1, ...]

따라서 bit_count2 == 1은 이진의 값 2에 단일 "1"비트를 가지기 때문에 == 1. 동시에 Bit_count [255] == 8.

그런 다음 uint를 바이트로 나누고 바이트 값을 사용하여 bit_count 배열에 인덱싱 한 다음 결과를 추가하십시오. 의사 코드 :

total = 0
for byte in list_of_bytes
    total = total + bit_count[byte]

편집하다

이 문제는이 책에 나타납니다 아름다운 코드, Henry S. Warren의 장에서. 또한 Matt Howells는 비트 수를 효율적으로 계산하는 C- 언어 구현을 보여줍니다. 보다 이 답변.

다른 팁

방법 중 하나 내가 본다:

x_set_bits = pack(NULL, x).count(it == 1);

pack(NULL, x) 변환 x 목록의 비트입니다.
count 행위 목록에서 모든 요소에 대한 조건을 보유하고 있습니다.이 경우에는 조건이라는 요소에 같음을 1 제공하의 번호를 설정 비트입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top