2011-11-18 4 views
1

개별 비트 조작에 익숙하지 않습니다. 이 질문은 다른 어떤 것보다 온전한 판단입니다 :긴 비트 목록 작업

나는 100 만개의 개별 비트 목록을 원합니다. 이렇게하려면 1000000/16unsigned ints의 목록을 만들어야합니다. 그런 다음이 반복을 통해 unsigned ints 비트 단위 연산자를 사용하여 개별 비트를 원하는 값으로 설정할 수 있습니다.

이게 맞습니까? 아니면 제가 정말로 바보입니까? 내가 올바른 길을 가고있다면 항상 unsigned int이 16 비트가 될 것이라고 보장합니까?

+0

'unsigned int '는 항상 16 비트가되는 것은 아니지만 대부분의 플랫폼에서 보통 32 비트이지만 보증되지는 않습니다. –

답변

3

아니요, unsigned int이 16 비트 너비라는 보장은 없습니다. 대신 uint16_t을 사용하십시오.

"목록"이라고 말하면 배열 또는 연결된 목록을 의미합니까? 연결된 목록을 사용하는 것보다는 배열을 사용하는 것이 더 확실합니다. 훨씬 더 나은 메모리 활용으로 이어질 것이고 개별 단어/비트에 대한 임의 액세스를 가능하게 할 것입니다. 당신이 당신의 "긴 목록이"동적으로 성장해야하는 경우

, 그러한 고정 된 크기의 배열 uint16_t에 대한 포인터의 성장 배열 (또는 연결리스트)와 같은 2 단계 구조를 고려하는 것이 적합 할 수 있습니다.

마지막으로 대부분의 최신 기계가 32 비트 또는 64 비트이기 때문에 32 비트 또는 64 비트 워드를 사용하는 것이 더 효율적일 수 있습니다.

+0

죄송합니다. 지정하지 않았습니다. 필자는 순차적으로 읽기/쓰기 만하기 때문에 실제로 연결된 목록을보고있었습니다. 그러나 메모리가 가장 중요하므로 배열로 전환합니다. 'uint16_t' 팁도 가져 주셔서 감사합니다. – providence

2

unsigned int에는 16 비트가 있다고 가정합니다. 실제로 보장 할 수 없으며 요즘에는 대부분 시스템에서 적어도 32 개가됩니다. 을 사용하여 int의 비트 수를 얻을 수 있습니다.

1

unsigned int의 크기를 확인하거나 cstdint에 정의 된 uint16_t를 사용할 수 있습니다. 또한 목록 대신 배열을 사용하면 검색을 제거 할 때가 더 빠릅니다. 이상적으로는 일정한 시간에 올바른 정수를 얻어야합니다.