해설에
좀 더 정확하게 만들려면 r, g, b를 unsigned char로 변환하여 8비트만 남긴 뒤 넘치는 자릿수를 제거해주고, 왼쪽으로 8자리 이동한 g는 unsigned short로 다시 변환하여 16비트만 남긴 뒤 넘친 자릿수를 제거합니다. 그리고 왼쪽으로 16자리 이동한 b는 unsigned int로 변환하여 32비트만 남긴 뒤 넘친 자리수를 제거하고 세 값을 비트 OR 연산으로 합쳐주면 됩니다.
라고 돼 있는데 넘치는 자리를 제거한다는 부분을
식으로 어떻게 표현해야 될지 모르겠습니다.
저 해설을 코드로 표현해야 합니다.
Unit 24.4에 비트 연산자로 플래그 처리하기가 있습니다.
bitwise_flag_on.c에서 세 가지 플래그를 처리하는데,
RGB 심사문제에서는 r, g, b가 각각 8비트짜리 플래그라고 생각하면 됩니다.
Unit 24.6, 24.7 연습문제와 심사문제에서 플래그를 확인할 수 있습니다.
큰 숫자를 작은 숫자로 바꾸는 경우에는 나머지 비트는 정리할 필요가 있습니다. 간단히 말해 32비트 숫자에서 8비트만 잘라서 쓴다면 나머지 비트는 정리할 필요가 있습니다. 비트를 자르는 방법은 mask를 쓰는 방법도 있고, 형변환을 이용하는 방법도 있습니다.
입력받은 숫자가 300이면 2진수로는 1 0010 1100이 됩니다. 중간 8~16비트 위치에 이 숫자를 넣는다면 왼쪽 끝에 1이 17번째 비트 값으로 들어가서 간섭을 일으키게 됩니다. 따라서 8개 값을 제외한 나머지 비트는 제거해야 합니다.
비트 이동, 형변환 또는 mask를 이용한 비트 정리, 비트 OR 연산으로 합치기를 할 수 있어야 합니다. 심사문제의 해설은 이 과정을 설명한 것으로 해설을 토대로 코드를 작성할 수 있어야 합니다.