Home > Study > C Language > ARM System Programming > [ex22] 비트 계산 AI

[ex22] 비트 계산 AI
Study Language

문제 설명


다음 주어진 코드를 이용하여 요구하는 기능을 수행하는 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 습관화 필요