더북(TheBook)

코드 실행 중 byteOffsetbitOffset을 구했으면, byteOffsetmBuffer 배열에 대한 인덱스로 삼아 기록할 바이트 위치를 찾는다. 다음 그 안에 들어 있는 데이터를 bitOffset만큼 왼쪽으로 시프트한 뒤 사용자가 넘겨준 값과 비트 OR 연산으로 합친다. 처음 숫자 13을 쓸 때는 두 오프셋 모두 0이므로 그다지 어려울 게 없다. 이제 WriteBits(52, 6)을 호출할 때 스트림에서 어떤 동작이 일어나는지 그림 4-5를 통해 살펴보자.

 

▲ 그림 4-5 두 번째 WriteBits 호출 직후 스트림 버퍼

 

이 시점에 mBitHead는 5가 된다. 즉, byteOffset은 0이고 bitOffset이 5가 된다.

숫자 52를 5비트 왼쪽으로 시프트하면 그림 4-6의 결과가 나온다.

▲ 그림 4-6 52를 왼쪽으로 5비트 시프트한 이진수 표현

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.