관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

연산자 3 - 비트시프트와 비트단위 논리연산 코딩테스트 <코드업> 본문

알고리즘 및 자료 관리/알고리즘 & 코딩테스트

연산자 3 - 비트시프트와 비트단위 논리연산 코딩테스트 <코드업>

huenuri 2024. 8. 25. 10:32
이번에는 비트시프트 연산과 비트단위 논리연산 문제를 풀어보려고 한다. 비트시프트 연산은 말 그대로 비트를 이동시키는 것이다. 비트 논리연산은 두 수가 주어졌을 때 그 값을 구하는 문제이다.
이제 문제를 풀어보기로 하자! 5문제가 나와있지만 비슷한 문제는 하나 빼고 4문제를 풀어보았다.



 

 

문제 1번 <1047번>

정수 1개 입력받아 2배 곱해 출력하기

 

정수 1개를 입력받아 2배 곱해 출력해보자.

#include <stdio.h>

int main(void)
{
	int a;

	scanf_s("%d", &a);
	printf("%d", a << 1);

	return 0;
}

 

 

이 문제는 왼쪽 시프트 연산자로 자리가 왼쪽으로 이동하면서 2의 거듭제곱 수가 해당 값이 된다.



 

 

문제 2번 <1048번>

 

한 번에 2의 거듭제곱 배로 출력하기

정수 2개(a, b)를 입력받아 a를 2의 b(거듭제곱)배 곱한 값으로 출력해보자.

0 <= a <= 10, 0 <= b <= 10

#include <stdio.h>

int main(void)
{
	int a, b;
	scanf_s("%d%d", &a, &b);
	printf("%d", a << b);

	return 0;
}


 

문제 3번 <1060번>

 

비트단위로 AND 하여 출력하기

입력된 정수 두 개를 비트단위로 and 연산한 후 그 결과를 정수로 출력해보자.
비트단위(bitwise)연산자 &를 사용하면 된다.(and, ampersand, 앰퍼센드라고 읽는다.)

#include <stdio.h>

int main(void)
{
	int a;

	scanf_s("%d", &a);
	printf("%d", ~a);

	return 0;
}

 

2를 and 비트 연산을 하니 -3이 나왔다.



 

문제 4번 <1062번>

 

비트단위로 XOR 하여 출력하기

입력된 정수 두 개를 비트단위로 xor 연산한 후 그 결과를 정수로 출력해보자.
비트단위(bitwise) 연산자 ^(xor, circumflex/caret, 서컴플렉스/카릿)를 사용하면 된다.

#include <stdio.h>

int main(void)
{
	int a, b;

	scanf_s("%d%d", &a, &b);

	printf("%d", a ^ b);

	return 0;
}

 

4번 문제는 xor 연산을 했다. 이 연산은 반대로 바꾸는 연산이다.



 

오늘의 네번째 단원 학습을 마치고

 

마지막 삼항 연산자 문제는 내일 풀어보려고 한다. 오늘도 2시간 반 정도 코딩 공부를 했는데 다른 공부도 할 게 많아 여기에만 시간을 많이 투자할 수가 없다.
프로그래밍은 언리얼과 달리 4~5시간을 해도 별로 질리지 않는 것 같다.

전에 시간이 많은 주말에 하루종일 공부를 할 때도 있었는데 별로 힘들지 않았었다.
내일은 선택문 개념학습에 들어가려고 한다. 비트 연산은 좀더 복습이 필요할 것 같아 다음에 한번 더 공부해볼 생각이다~