75.10 rgb매크로정의
, 김 수현님이 작성RGB(r, g, b) (((unsigned char)r)|((unsigned short)((unsigned char)g<<8))|((unsigned short)((unsigned char)b<<16)))
정수세 개를 받아서 매크로정의를 하였는데 실패하는 이유를 잘 모르겠습니다.
회신: 75.10 rgb매크로정의
, 도장_ 관리자님이 작성심사 문제 해설에 다음 부분이 있습니다.
단, 연산자 우선순위에 영향을 받지 않도록 r, g, b와 연산 결과를 괄호로 묶어줍니다.
r이 아니라 (r)처럼 괄호로 묶어야 합니다. Unit 75.5 매크로와 연산자 우선순위 알아보기에 설명되어 있습니다.
<<로 비트 이동한 전체 연산 결과를 괄호로 묶어야 합니다. 그렇지 않으면 연산자 우선순위 때문에 다른 값이 됩니다.
즉, b << 16처럼 쓰면 안 됩니다. (b)로 써야 하고, ((b) << 16)처음 써야 합니다. 또한, 타입 변환을 한다면 타입 변환을 먼저 ()로 묶고 나서 <<로 비트 이동을 해야 합니다. 괄호 순서를 잘 지정해서 연산자 적용 순서가 올바르게 해야 합니다.
Unit 75.5를 참고하세요.