안녕하세요 틴구입니다~!!
오늘도 수업 들은 내용을 글로 써 보려고 합니다!!
한번 코드를 분석해 가면서 가 볼까요!!
연산자축약형
우선 어제 연산자에 대해 배웠었는데 오늘은 연산자 축약형에 대해 설명드리도록 하겠습니다.
연산자축약형이란 말 그대로 연산자를 줄여서 사용한다는 뜻입니다.
ex) int Number = 10;
이라고 가정을 했을 때
Number = Number + 5;
라고 식을 추가할 때
Number += 5; 이렇게 축약을 해서 사용할 수가 있습니다!
여기서
std::cout << "Number = " << Number << std::endl;
코드를 치게 되면 Number의 값을 확인할 수 있습니다.
한번 다른 코드를 쳐 볼까요
이번엔
Number = 3; 이라고 할 때
Number ^= 5;
라는 연산자축약형을 넣어볼게요
std:;cout << "Number = " << Number << std::endl;
를 치면
Number = 6이라고 나옵니다!
한번 맞는 결과인지 식을 계산해볼까요?
3을 2진수로 변경하면
3 / 2 = 1 --- 1 0b11이 나옵니다.
5를 2진수로 변경하면
5 / 2 = 2 ---- 1
2 / 2 = 1 --- 0 0b101이 나옵니다.
101
^011
------
110 = 6이 나오게 되네요!!
아 또 선생님께서 주의해야 할 연산자를 알려주셨는데 바로 나누기 연산자랍니다.
나누기 연산자의 경우 정수 / 정수를 하게 되면 소수점 자리는 사라지고 정수부 분만 남게 됩니다.
ex) Number = 11 / 3;
을 하게 됐을 때
std::cout << "Number = " << Number << std:;endl;
코드를 작성하여 값을 확인해 보면 3이라는 정수 값만이 나오게 됩니다.
여기서 결과를 실수로 나오게 하려면 두 개의 값 중 하나를 반드시 실수여야 합니다.
ex) float fNumber = 11 / 3.f
위의 식처럼 .f를 넣게 되면
std::cout << fNumber << std::endl;
결괏값이 3.33333이 나오게 된다.
또 실수를 정수에 대입할 경우 형변환이라는 것을 해야 합니다.
int iNumber = 0;
iNumber = 11 / 3.f;
를 하게 되면 warning이 뜨는 것을 확인할 수 있는데 이 warning 때문에 추후에 버그가 생길 수 있어 형변환을 해야 합니다.
iNumber = (int)(11 / 3.f);
이렇게 말이죠!
증감연산자
다음으로는 증감연산자에 대해서 알아볼 건데
증감연산자는 ++, -- 두 종류가 있습니다.
++ 는 1을 증가시킨다
-- 는 1을 감소시킨다라는 개념을 갖고 있는데
여기서 중요한 게 전치 연산이냐, 후치 연산이냐가 중요합니다.
전치 연산이란 : 변수 앞에 증감연산자를 부여하는 것을 의미하고 값을 먼저 1 증가 or 1 감소를 시키고 해당 연산을 진행합니다.
후치 연산이란 : 변수 뒤에 증감연산자를 부여하는 것을 의미하고 연산을 진행한 후 값을 1 증가 or 1 감소를 진행합니다.
iNumber = 10;이라고 가정했을 때
// 전치 연산
std::cout << "iNumber = " << ++iNumber << std::endl;
// 후치 연산
std::cout << "iNumber = " << iNumber++ << std::endl;
// 후치 연산으로 인한 결과 값
std::cout << "iNumber = " << iNumber << std::endl;
의 결과를 확인해보면
iNumber = 11
iNumber = 11
iNumber = 12
의 순서인 것을 확인할 수 있다.
처음에 전치 연산을 해서 iNumber += 1의 형태가 되어 11이 된 거고
두 번째 후치 연산의 경우에는 iNumber에 연산을 진행한 후 값을 증가시키기 때문에 그대로 11인 것을 확인할 수 있다.
마지막으로 iNumber의 경우는 아무것도 진행하지 않았지만 위에서 후치 연산을 진행했기 때문에
12로 바뀐 것을 볼 수 있다.
삼항연산자
삼항연산자는 조건 ? 값1 : 값2의 형태로 사용이 된답니다.
앞의 조건이 true라면 값1의 형태가 되고 조건이 false면 값2가 되는 형태입니다.
ex) Number = 10; 이라고 값을 부여한 뒤
int Number1 = Number < 5 ? 15 : 30;
이렇게 식을 나열하고
std::cout << "Number1 = " << Number1 << std::endl;
의 코드를 치게 되면
Number1 = 30
가 나오게 됩니다.
Number라는 변수를 10이라고 정했는데 5보다 크니깐 false고
false가 되면 값 2에 해당하는 값을 얻기 때문에 Number1 = 30이 되는 방식입니다.
삼항연산자를 배우면서 sizeof라는 것도 배웠는데
이 sizeof는 해당 메모리의 크기를 알 수 있습니다.
ex) std::cout << "int변수의 크기 = " << sizeof(int) << std::endl;
이렇게 검색을 하면 결괏값이
int변수의 크기 = 4
로 나오는 것을 알 수 있습니다.
조건문 ★★★★★
if문
조건문이란 특정한 조건을 측정하여 true인지 false인지에 따라서 특정한 동작을 할 것인지 판단할 때 사용합니다.
영어 if랑 비슷한 거 같아요 만약에 ~라면??
식의 구조는
if (조건)
{
조건이 true일 때 동작되는 코드
}
로 구성되어 있습니다.
예로 저의 몸무게로 예시를 들어볼게요
int weight = 69; 저의 몸무게가 69kg이라고 가정을 했을 때 이걸 if변수로 표현을 해볼게요
if (weight < 70)
{
std::cout << "내 몸무게는 70kg 이하다." << std::endl;
}
이런 식으로 작성을 하게 되면 괄호 안에 있는 조건식이 true가 되어
내 몸무게는 70kg 이하다.라고 출력이 되는 것을 확인할 수 있습니다.
또 조건식에서 {} 중괄호를 코드 블록이라고 하는데
이 코드 블록은 괄호 안에 있는 코드만을 인식해 그 코드를 동작시키는 블록입니다.
또 코드 블록에 있는 내용이 한 줄이라면 코드 블록을 생략할 수 있습니다.
ex)
if (weight < 70)
std::cout << "내 몸무게는 70kg 이하다." << std::endl;
이런 식으로 사용할 수 있습니다.
또 if구문에는 else와 else if란게 있는데
우선 else부터 설명드릴게요
else의 경우에는 독단적으로 사용할 수 없는 구문이에요. 반드시 if와 함께 사용해야 합니다.
if 조건식이 true 일 때 코드 블록을 실행시킨다면 else 같은 경우는
if 조건식이 false 일 때 else의 코드 블록 코드를 실행시킨다고 생각하면 됩니다.
이번엔 else구문을 설명하기 위해 논리연산자를 이용해 퀴즈를 만들어 보겠습니다.
ex)
// 논리연산자를 이용한 if구문 활용
// AND연산자의 경우 둘 다 참일 경우에만 참이기 때문에 조건식이 true 이면 if 구문의 코드 블록을 실행시키고
// false라면 esle 구문의 코드 블록을 실행시킨다.
#include <iostream>
int main()
{
int weight = 0;
// 내 몸무게를 69이라고 가정
weight = 69;
// 코드 실행 시 처음에 나오는 문제 및 설명
std::cout << "퀴즈 : 내 몸무게는 몇 kg 일까?" << std::endl;
std::cout << "몸무게를 입력하세요." << std::endl;
// 입력 변수를 만들기 위해 Number란 변수를 생성
int Number;
// cin을 이용해 숫자 입력
std::cin >> Number;
// 논리연산자를 활용한 if구문
if ((68 < Number) && (Number < 70))
{
std::cout << "내 몸무게는 " << weight << " 이다." << std::endl;
}
else
{
std::cout << "틀렸습니다." << std::endl;
}
return 0;
}
이렇게 코드를 작성하고 출력을 하면
퀴즈 : 내 몸무게는 몇 kg 일까?
몸무게를 입력하세요.라는 문구가 나오게 되고
(몸무게를 입력할 수 있다)
여기서 몸무게를 69를 입력을 하면 조건식이 둘 다 참이 되어 if구문으로 들어가
내 몸무게는 69kg이다. 가 출력이 되고
다른 숫자를 입력했을 경우 조건식이 false가 되어 else 구문의 코드 블록을 실행해서
틀렸습니다. 라는 문구가 나오게 된다.
다음은 else if란 것에 대해서 설명드리겠습니다
else if 도 마찬가지로 독립적으로 사용할 수 없고
if의 조건식이 false일 경우 else if의 조건식을 순차적으로 검사 후
그 조건식 중 true가 나오면 해당 코드 블록을 실행 후 종료하는 개념입니다.
위의 코드를 참고해서 하나 더 만들어볼게요.
#include <iostream>
int main()
{
int weight = 0;
// 내 몸무게를 69이라고 가정
weight = 69;
// 코드 실행 시 처음에 나오는 문제 및 설명
std::cout << "퀴즈 : 내 몸무게는 몇 kg 일까?" << std::endl;
std::cout << "몸무게를 입력하세요." << std::endl;
// 입력 변수를 만들기 위해 Number란 변수를 생성
int Number;
// cin을 이용해 숫자 입력
std::cin >> Number;
// 논리연산자를 활용한 if구문
if ((68 < Number) && (Number < 70))
{
std::cout << "내 몸무게는 " << weight << " 이다." << std::endl;
}
else if ((60 < Number) && (Number < 66))
{
std::cout << "조금 근접합니다." << std::endl;
}
else if ((65 < Number) && (Number < 69))
{
std::cout << "완전 근접합니다" << std::endl;
}
else if ((69 < Number) && (Number < 75))
{
std::cout << "완전 근접합니다" << std::endl;
}
else if ((74 < Number) && (Number < 80))
{
std::cout << "완전 근접합니다" << std::endl;
}
else
{
std::cout << "틀렸습니다." << std::endl;
}
return 0;
}
뭔가 내용이 이상하긴 한데 어쨌든!! 이런 식으로 활용할 수가 있습니다!
switch문
if문에서는 조건식이 참인지 거짓인지를 판단해 동작을 시켰는데
switch문은 어떤 값인지를 판단해서 동작시킬 때 활용을 합니다.
switch문 형태는
switch(변수(값))
{
case 체크하고자하는 값(상수):
break;
}
의 형태로 이루어져 있습니다.
여기서 중요한 게 case 뒤에 변수를 넣으면 안 된다는 점입니다.
무조건 상수를 넣어야 합니다.
예를 들어서
int Number = 1;
int Number1 = 5;
switch (Number1)
{
case Number: <-- 이렇게 사용할 수 없습니다.
break;
}
또 여기서 중요한 게 있는데 case구문 끝나는 시점에 break; 가 없으면 해당 구문 이후의 구문까지 한 번에 출력이 된다
int Number1 = 4; // 라고 가정했을 때
switch (Number1)
{
case 1:
std::cout << "Number1 의 값은 1입니다." << std::endl;
break;
case 2:
std::cout << "Number1 의 값은 2입니다." << std::endl;
break;
case 3:
std::cout << "Number1 의 값은 3입니다." << std::endl;
break;
// case 4: 구문 끝나는 시점에 break;가 없으면 그 뒤에 구문까지 출력이 된다.
case 4:
std::cout << "Number1 의 값은 4입니다." << std::endl;
case 5:
std::cout << "Number1 의 값은 5입니다." << std::endl;
break;
}
이렇게 코드 구성을 하게 되면 switch의 조건의 값이 4이기 때문에
case 4: 의 구문의 코드를 수행하는데 마지막에 break; 가 없어
case 5:의 코드까지 수행을 하게 된다.
ex)
Number1 의 값은 4입니다.
Number1 의 값은 5입니다.
또 switch문에는 if문의 else처럼 default란게 있는데 이 default는
조건이 case 구문중에 하나도 없을 경우 default 코드 블록을 실행하게 된다.
int Number1 = 7
switch (Number1)
{
case 1:
std::cout << "Number1 의 값은 1입니다." << std::endl;
break;
case 2:
std::cout << "Number1 의 값은 2입니다." << std::endl;
break;
case 3:
std::cout << "Number1 의 값은 3입니다." << std::endl;
break;
default:
std::cout << "체크할 수 없는 숫자입니다." << std::endl;
break;
}
조건의 값이 7인데 case 구문에 7이란 상수값이 없기 때문에 default의 코드를 수행하여
체크할 수 없는 숫자입니다. 라는 문구가 나오게 된다.
열거체
switch문을 배우면서 열거체 타입이란 것도 배웠습니다!
열거체란 상수에 이름을 부여해줄 수 있는 문법입니다.
열거체의 코드 구성은
enum 원하는 열거체 이름
{
};
입니다
여기서 열거체 이름은 없어도 상관이 없다고 합니다
만약에 열거체 이름을 작성해준다면 열거체 이름은 해당 열거체의 변수 타입이 됩니다.
즉, 사용자가 변수 타입을 만들 수 있게 되는 것이라고 합니다.
선생님께서 직업을 활용해서 설명을 해주셔서 저도 직업으로 한번 만들어 보겠습니다
#include <iostream>
// 가독성을 위해서 std::를 생략하겠습니다.
using namespace std;
// enum을 활용해 JOB종류 구성.
enum JOB
{
JOB_NONE, // 0
JOB_KNIGHT, // 1
JOB_ARCHER, // 2
JOB_MAGICION, // 3
JOB_ASSASSIN // 4
};
int main()
{
// cout을 활용한 직업 선택 멘트 구성
cout << "직업을 선택해주세요" << endl;
cout << "1. 나이트" << endl;
cout << "2. 아쳐" << endl;
cout << "3. 매지션" << endl;
cout << "4. 어쌔신" << endl;
// 스위치 값을 선택하기 위한 인트 변수 활용
int jNumber = 0;
// cin을 활용해 본인이 원하는 직업을 선택할 수 있게끔 설정
cin >> jNumber;
// 스위치문 값에 jNumber을 넣음으로써 본인이 원하는 직업 선택 가능.
switch (jNumber)
{
case JOB_KNIGHT:
cout << "당신은 나이트를 선택하였습니다." << endl;
break;
case JOB_ARCHER:
cout << "당신은 아쳐를 선택하였습니다." << endl;
break;
case JOB_MAGICION:
cout << "당신은 매지션을 선택하였습니다." << endl;
break;
case JOB_ASSASSIN:
cout << "당신은 어쌔신을 선택하였습니다." << endl;
break;
// 잘못 선택했을 경우의 default 값
default:
cout << "잘못 선택하였습니다." << endl;
break;
}
return 0;
}
이렇게 스위치문을 활용해서 직업을 설정하는 법도 만들어 보았습니다!!
아직은 cout으로 밖에 못하지만... 나중엔 더 잘해지겠죠??? ㅋㅋㅋㅋ
그럼 오늘은 여기까지 해보겠습니다!! 다음에 봬요!!
'c++' 카테고리의 다른 글
20210714 배열 ~ 빙고 게임 과제 (0) | 2021.07.15 |
---|---|
20210713 과제 풀이 ~ 난수 (0) | 2021.07.13 |
20210712 반복문 for, while, do while (0) | 2021.07.13 |
20210708 변수부터 연산자까지 (0) | 2021.07.09 |
20210707 c++ 첫 시작부터 변수까지 (0) | 2021.07.08 |
댓글