75.10
, 이 힐링님이 작성RGB(r, g, b) (((unsigned char)(r))|((unsigned short)((unsigned char)(g)<<8))|((unsigned short)(unsigned char)((b)<<16)))
도대체 어느 부분이 잘못된거죠
Re: 75.10
, 도장_ 관리자님이 작성심사문제 해설에 답이 있습니다.
심사문제 해설을 눈을 크게 뜨고 밝은 눈으로 보시면 보입니다.
여기에 다시 인용합니다.
좀 더 정확하게 만들려면 r, g, b를 unsigned char로 변환하여 8비트만 남긴 뒤 넘치는 자릿수를 제거해주고, 왼쪽으로 8자리 이동한 g는 unsigned short로 다시 변환하여 16비트만 남긴 뒤 넘친 자릿수를 제거합니다. 그리고 왼쪽으로 16자리 이동한 b는 unsigned int로 변환하여 32비트만 남긴 뒤 넘친 자리수를 제거하고 세 값을 비트 OR 연산으로 합쳐주면 됩니다.
문의한 코드의 문제가 보이죠?
Re: 75.10
, 이 힐링님이 작성RGB(r, g, b) (((unsigned char)(r))|((unsigned short)((unsigned char)(g)<<8))|((unsigned int)(unsigned char)((b)<<16)))
이렇게 했는데도 안나오네요
Re: 75.10
, 도장_ 관리자님이 작성공백을 적절히 넣어서 구분하시면 코드를 읽고 이해하기가 쉬워지고, 수정하기도 쉬워집니다.
g << 8은 동작하고, b << 16은 동작하지 않습니다.
g 부분의 코드는 올바르게 작성된 것이고, b 부분의 코드는 그렇지 않습니다.
이 둘을 수평으로 나란히 두어서 차이를 살펴보세요.
((unsigned short) ((unsigned char)(g)<<8))
((unsigned int) (unsigned char)((b)<<16))
뭔가 코드가 다르죠?
괄호는 연산의 순서를 정합니다.
연산자 우선순위도 살펴보면 좋습니다.