22년 3월 8일
#include <iostream>
int main()
{
//비트 연산자의 실제 활용 예시
const int Attack = 0x1; //이진수 0001
const int Armor = 0x2; //이진수 0010
const int HP = 0x4; // 이진수 0100
const int MP = 0x8; // 이진수 1000
const int Critical = 0x10; // 10000
int Buf = 0;
//우리가 어택, HP, 크리티컬 버프를 준다고 하면
//Buf = 0 | 1 = 1
Buf = Buf | Attack;
//Buf = 001 | 100 = 101
Buf = Buf | HP;
//Buf = 00101 | 10000 = 10101
Buf = Buf | Critical;
//버프 체크하기
//
//10101 & 00001 = 00001(true)
std::cout << "Attack : " << (Buf & Attack) << std::endl;
//10101 & 00010 = 00000(false)
std::cout << "Armor : " << (Buf & Armor) << std::endl;
//10101 & 00100 = 00100(true)
std::cout << "HP : " << (Buf & HP) << std::endl;
//10101 & 01000 = 00000(false)
std::cout << "MP : " << (Buf & MP) << std::endl;
//10101 & 10000 = 10000
std::cout << "Critical : " << (Buf & Critical) << std::endl;
//0은 거짓, 0이 아닌 모든 수는 '참'이므로 '참
//버프 켜기/끄기: XOR을 사용한 온/오프 토글 기능.
//Buf = 10101 ^ 00100 = 10001
printf("\n* HP Buf OFF\n");
Buf = Buf ^ HP;
std::cout << "HP : " << (Buf & HP) << std::endl;
//비트단위로 쪼개서 쓰는 법을 숙지하고 만들어낼 수 있어야 한다.(많이 사용함)
/*
쉬프트 연산자: <<, >> 2가지 연산이 제공된다.
10 << 2 = ?
10 / 2 = 5 -- 0
5 / 2 = 2 --- 1
2 / 2 = 1 --- 0
-->1010
1010 << 2 --> 1010을 왼쪽으로 두 칸 이동시켜라
101000이 된다.
101000 = 40(10)
1010 << 3 = 1010000이 된다.
결과값: 80(10)
40 >> 2 =
101000 >> 2 = 1010(.00)
1010 = 10(10)
80 >> 3 =
1010000 >> 3 = 1010 = 10(10)
--> 곱셈과 비슷. 2^n 단위로 처리할 떄는 굉장히 빠른 성능을 보여줌.
*/
/*
비트단위 연산자와 쉬프트 연산자를 합쳐서 사용하면 좋은 기능을 만들어낼 수 있음.
일반적으로는 픽셀 하나에 32bit를 사용.
포함된 정보 = a(투명도) + RGB 각각 1byte씩.
A R G B
130 200 78 100
비트단위 논리 연산자와 쉬프트 연산자로, 원하는 공간에 원하는 값을 집어넣어 색감을 바꿀 수 있다.
↓예제
*/
int Color = 0;
Color = 100; // 100(10) = 110 0100(2)
/*
A R G B
0 0 0 100
00000000 00000000 00000000 01100100
*/
Color = Color << 8; // 100이라는 값을 8칸 옆으로 밀어서 G값에 입력
/*
A R G B
0 0 100 0
00000000 00000000 01100100 00000000
*/
Color = Color | 130; // 130(10) = 10000010
/*
A R G B
0 0 100 130
00000000 00000000 01100100 10000010
*/
Color = Color << 8;
/*
A R G B
0 100 130 0
00000000 01100100 10000010 00000000
*/
Color = Color | 200;//200(10)=11001000(2)
/*
A R G B
0 100 130 200
00000000 01100100 10000010 11001000
*/
Color = Color << 8;
/*
A R G B
100 130 200 0
01100100 10000010 10000010 00000000
*/
Color = Color | 78; // 78(10) = 0100 1110(2)
/*
A R G B
100 130 200 78
01100100 10000010 10000010 01001110
*/
//컬러 연산 완료
//만약 각각 RGB값을 얻어오고 싶다면?
std::cout << std::endl << "B : " << (Color & 0x000000ff) << std::endl;
// 01100100 10000010 10000010 01001110
//&00000000 00000000 00000000 11111111
//=00000000 00000000 00000000 01001110
//같은 방식으로 RGB 값 모두 추출이 가능하다.
std::cout << "G : " << ((Color >> 8) & 0x000000ff) << std::endl;
std::cout << "R : " << ((Color >> 16) & 0x000000ff) << std::endl;
std::cout << "A : " << ((Color >> 24) & 0x000000ff) << std::endl;
//연산자 축약형
int number = 100;
number = number + 10;
number += 10;
/*
분기: 여러 경우 중 하나의 경우만 실행해주는 기능을 말한다.
if문, switch문 2가지가 제공된다.
if로 시작해서 if로 끝날 정도로 굉장히 많이 쓰이는 문법.
1.if
if(조건식)
{
코드블럭: 실행하고자 하는 코드 작성
}
조건식은 true 아니면 false이다.
위에서 조건식이 true라면 {}(코드블럭) 안의 코드가 동작이 된다.
위에서 조건식이 false라면 {}(코드블럭) 안의 코드는 무시된다.
2.else
else
{
}
else는 혼자서 사용할 수 없다.
if문의 부속품이라고 보면 된다.
반드시 if문과 함께 사용되어야 하고 if문보다는 아래에 위치해야 한다.
else는 if문의 조건이 false일 경우 동작이 된다.
else if(조건식)
{
조건식이 true일 경우 실행할 코드,
}
else if는 혼자서 사용할 수 없다.
반드시 if문과 함께 사용이 되어야 하고 if문보다는 아래에 위치해야 한다.
else if는 if 문의 조건이 false 일 경우 else if 의 조건을 체크하게 된다.
else if는 if문 1개에 여러개의 else if가 존재할 수 있다. 없어도 된다.
단, else가 있을 경우 else if는 else보다 위에 존재해야 한다.
*/
std::cout << std::endl;
if (false)
{
std::cout << "조건이 true 입니다." << std::endl;
}
else
{
std::cout << "조건이 false 입니다." << std::endl;
}
//if문에 대해 알아보기 전에 입력받는 방법 배워보기
std::cout << std:: endl << "숫자를 입력하세요. : ";
std::cin >> number;
std::cout << "입력된 number : " << number;
//입력되는 값은 변수 자료형에 맞는 값을 넣어야 한다. 다른 값을 넣을 경우 0으로 들어감.
/*
tip)여러 줄 주석처리하기: 블록지정 후 Ctrl + K + C
해제는 Ctrl + K + U
tip2)컨트롤+클릭 하면 단어 지정이 됨.(도구-옵션 - 텍스트 편집기 - 정의로 이동)
tip3)스크롤바를 지도 모드로 바꾸기(도구 - 옵션 - 모든 언어 - 스크롤 막대 - 지도 모드)
*/
int Menu = 0;
std::cout << std::endl << std::endl << "1. 메뉴1" << std::endl;
std::cout << "2. 메뉴2" << std::endl;
std::cout << "3. 메뉴3" << std::endl;
std::cout << "4. 메뉴4" << std::endl;
std::cout << "메뉴를 선택하세요 : ";
std::cin >> Menu;
//만약 if문에서 실행될 코드가 1줄이라면 {}(코드블럭)을 생략할 수 있다.
if (Menu == 1)
std::cout << "Menu1 을 선택하였습니다.";
else if (Menu == 2)
std::cout << "Menu2 을 선택하였습니다.";
else if (Menu == 3)
std::cout << "Menu3 을 선택하였습니다.";
else if (Menu == 4)
std::cout << "Menu4 을 선택하였습니다.";
else
std::cout << "잘못된 메뉴를 선택하였습니다.";
return 0;
}