2012-12-05 4 views
0

아래에서 위로 이진 트리를 가로 질러 가고 싶습니다.비트 연산, 비트 저장, 8 비트 이후 확장

그럼이 traversion (= the way)의 bitsequence를 char에 저장하고 싶습니다.

내가 이상 8 비트 bitsequence있는 경우, 숯 동적 그래서, 예를 들면, 2 바이트를 확대되어야하므로이 동작은 동적이어야 ....

bitsequence가 있으면 예 1001010 정확히 같은 비트 시퀀스를 char 안에 저장하고 싶습니다.

비트 시프트 연산자 < < >>을 사용해야한다고 알고 있지만, 정확히 수행 할 수있는 정확한 방법은 알아낼 수 없습니다.

나는 char에 8 비트를 쓴 후에 문제가 발생했습니다.

일부 샘플 코드를 첨부 했으므로 누군가가 약간의 빛을 발할 수 있기를 바랍니다.

감사

char* bits = malloc(sizeof(char)); 
char* temp_bits = NULL; 

some loop 
{ 
    if (cnt_bit > 7) 
    { 
    temp_bits = realloc(bits, sizeof(char)*2); 
    free(bits); 
    bits = temp_bits; 
    } 
    *bits = *bits << 1; 
    *bits = *bits | 0; 
    cnt_bit++; 
} 
+1

두 개의 문자가 있으면 비트 시프트는 첫 번째 (즉, 하위 바이트)에서만 작동합니다. 직접 비트 시프트 논리를 수동으로 구현해야합니다. –

+6

'realloc' 후에'free'를하지 마십시오. – imreal

답변

1

당신은 다음에 하나 개의 메모리 값에서 이동할 수 없습니다! 그것을 원한다면 64 비트 타입 인 "long long int"를 사용할 수는 있지만 일반적으로 작동하는 자신 만의 시프트 연산을 구현하지 않으면 시프트를 사용하여 그 이상으로 갈 수 있다고 생각하지 않습니다. 정렬.

레벨 당 1 바이트를 사용하면 훨씬 빨라질 것이라고 생각합니다.