문제 설명
다음 주어진 코드를 이용하여 요구하는 기능을 수행하는 func 함수를 설계하라.
단, func 함수 이외 다른 코드는 절대 수정하면 안된다.
[요구 사항]
- 함수 func는 정수 x를 입력 받고 정수를 리턴한다.
- x의 0번 비트를 0으로 만든다.
- x의 4,5,6,7번 비트를 1로 만든다.
- x의 23번 비트를 반전시킨다.
- 다른 비트는 원래 값을 유지해야한다.
- 변경된 x값을 리턴한다.
- 단, 코드가 정상적이라면 아래와 같은 값이 인쇄 되어야 한다.
#include "device_driver.h"
static void Sys_Init(void)
{
Clock_Init();
Uart_Init(115200);
}
unsigned int func(unsigned int x)
{
// 코드 구현
return x;
}
void Main(void)
{
Sys_Init();
Uart_Printf("0x%.8X\n", func(0xFFFFFFFFu));
Uart_Printf("0x%.8X\n", func(0x00000000u));
Uart_Printf("0x%.8X\n", func(0x55555555u));
Uart_Printf("0x%.8X\n", func(0xCCCCCCCCu));
Uart_Printf("0x%.8X\n", func(0xAAAAAAAAu));
Uart_Printf("0x%.8X\n", func(0x33333333u));
}
[출력값]
0xFF7FFFFE
0x008000F0
0x55D555F4
0xCC4CCCFC
0xAA2AAAFA
0x33B333F2
[제출 요령]
- 코드를 완성하면 반드시 동작 확인을 받은후 강사 지시에 의하여 코드를 업로드해야함
- 임의로 코드 제출시 해당 문항 0점 처리되므로 주의 바람
- 위 코드를 main.c에 복사하여 작성할 것
- 다른 파일에 있는 수업때 사용한 코드 등을 호출하여 사용할 경우 반드시 이동하여 사용할 것
- 코드는 main.c의 전체를 복사하여 제출할 것
정답 코드
#include "device_driver.h"
static void Sys_Init(void)
{
Clock_Init();
Uart_Init(115200);
}
unsigned int func(unsigned int x)
{
Macro_Clear_Bit(x, 0);
Macro_Write_Block(x, 0xf, 0xf, 4);
Macro_Invert_Bit(x, 23);
return x;
}
void Main(void)
{
Sys_Init();
Uart_Printf("0x%.8X\n", func(0xFFFFFFFFu));
Uart_Printf("0x%.8X\n", func(0x00000000u));
Uart_Printf("0x%.8X\n", func(0x55555555u));
Uart_Printf("0x%.8X\n", func(0xCCCCCCCCu));
Uart_Printf("0x%.8X\n", func(0xAAAAAAAAu));
Uart_Printf("0x%.8X\n", func(0x33333333u));
}
메모
printf 내부의 \n 습관화 필요