세 개의 식별자가 있으면 단일 32 비트 값으로 결합하십시오.3 개의 32 비트 식별자를 하나의 32 비트 식별자로 결합합니까?
첫 번째 식별자는 (2^8) -1 개의 다른 값을 가질 수 있습니다. 유사하게 두 번째 (2^8) -1과 세 번째 (2^10) -1. 따라서 모든 종류의 식별자의 총 개수는 (2^32) -1을 초과하지 않습니다.
예 용액 맵을 가질 수 있었다 :
- 키를 32 비트
- 값 : 8 (또는 10) 비트.
값은 0에서 시작하여 새 식별자가 제공 될 때마다 증가합니다.
더 잘 할 수 있습니까? (3 개지도 대신)이 솔루션에 문제가 있습니까? 명확히
는 식별자 범위 < 0, 32^2)에서 어떤 값을 보유 할 수있다. 주어진 유일한 정보는 그것들의 총 수가 (2^8) -1 (또는 10)을 초과하지 않는다는 것입니다.
식별자의 값은 동일 할 수 있습니다 (완전히 임의적입니다). OS가 힙 할당 메모리 (예 : 포인터를 식별자로 사용)에 제공 한 임의성 소스 메모리 주소를 고려하십시오. 이것이 x64 시스템에서 다르게 작동한다는 것을 알았지 만, 일반적인 문제 해결 방법이이 특정 시스템과 유사하기를 바랍니다.
이것은 간단한 비트 시프트가 문제가되지 않는다는 것을 의미합니다.
왜 3 비트 필드를 사용하지 않는가? – harold
''encoded = ((b10 * 256) + b8_1) * 256 + b8_2' 그리고 그 반대 방향으로 디코딩을 할 수 없습니까? 꽤 효율적이어야합니다. –
여기에 약간의 설명이 필요합니다. 3 개의 식별자가 숫자입니까? 그들은 별개입니까?그들이 취할 수있는 가치의 범위를 조금 더 자세하게 설명 할 수 있습니까? (MichaelS의 답변에서 토론을 참조하십시오). 당신은 미리 다른 값들을 모두 알고 있습니까? – waTeim