컴퓨터 시스템에서 색상을 표현하는 방법 중에 RGB 표기법은 red, green, blue에 8비트씩을 사용해서 색상을 표현하므로 24비트 트루컬러라고 한다. 컴퓨터 시스템에서는 32비트 데이터의 최하위 바이트부터 red, green, blue의 순서로 색상 정보를 저장하고 최상위 바이트는 사용하지 않고 0으로 채운다. 0~255사이의 값을 red, green, blue의 순서로 3개 입력받아서 RGB 색상을 만들어서 출력하는 프로그램을 작성하시오. RGB 색상을 출력할 때는 바이트 단위로 값을 알아보기 쉽도록 16진수로 출력한다.
조건 : red, green, blue 값을 입력받을 때 0~255 범위의 값을 입력받아야 한다. 만약 255보다 큰 값을 입력하면 오버플로우로 처리하게 구현하시오. 즉, 예를 들어 256이 입력되면 0을 입력한 것으로 처리해야 한다.
#include <stdio.h>
int main()
{
unsigned char r, g, b; // 각각 8 bit
unsigned int rgb_color; // 32 bit
printf("red : ");
scanf_s("%d", &r);
printf("green : ");
scanf_s("%d", &g);
printf("blue : ");
scanf_s("%d", &b);
rgb_color = r | g << 8 | b << 16;
printf("%06X", rgb_color);
return 0;
}
unsigned char형의 범위는 0~255로, 문제에서 제시된 256 이상의 값을 입력했을 때 오버플로우 시켜 0으로 처리하는 조건에 부합하기 위해 이 데이터형을 사용합니다.
입력받은 r, g, b 값을 |(or) 비트 논리 연산자와 비트 시프트 연산을 통해 결과값`rgb_color`에 대입합니다.
%06X 값으로 출력하여 16진수로 6자리를 맞춰 출력하고, 값이 0이어도 0을 출력합니다. 예를 들어 red, green, blue가 255, 0, 0 인 경우 0000FF로 출력합니다.
이 코드의 문제점?
C6328 에러를 야기합니다.
문제 출처 - Core C Programming(천정아 저)
'Language > C, C++' 카테고리의 다른 글
[C] [포인터] 배열 원소 값 뒤집기 (0) | 2021.10.17 |
---|---|
[C] 배열의 합, 평균, 최댓값, 최솟값 출력 : 배열 알고리즘 (0) | 2021.06.07 |
[C] 두 점 사이의 거리 출력 : 함수 응용 (0) | 2021.06.06 |
[C] Max / Min 출력 : 함수 응용 (0) | 2021.06.06 |
[C] 1에서 100 사이의 3의 배수의 합 : for, while, do while 반복문의 이해 (0) | 2021.06.05 |