+ 연산자에 의한 결괏값은 14입니다.
- 연산자에 의한 결괏값은 6입니다.
* 연산자에 의한 결괏값은 40입니다.
/ 연산자에 의한 결괏값은 2입니다.
% 연산자에 의한 결괏값은 2입니다.
2. 대입 연산자(assignment operator)
a. 대입 연산자란?
🌟 변수에 값을 대입할 때 사용
b. 대입 연산의 특징
두 개의 피연산자를 가지는 이항 연산자
피연산자들의 결합 방향 : ⬅
산술 연산자와 결합한 다양한 복합 대입 연산자가 존재
c. 대입 연산자의 종류
대입 연산자
설명
예제 int a = 10;
=
왼쪽 값에 오른쪽 값을 대입
a = 3 // a = 3
+=
왼쪽 값에 오른쪽 값을 더한후, 그 결괏값을 왼쪽 값에 대입
a+=3 // a = 13
-=
왼쪽 값에 오른쪽 값을 뺀 후, 그 결괏값을 왼쪽 값에 대입
a-=3 // a = 7
*=
왼쪽 값에 오른쪽 값을 곱한 후, 그 결괏값을 왼쪽 값에 대입
a*=3 // a = 30
/=
왼쪽 값에 오른쪽 값을 나눈 후, 그 결괏값을 왼쪽 값에 대입
a/=3 // a = 3
%=
왼쪽 값에 오른쪽 값을 나눈 후, 그 나머지를 왼쪽 값에 대입
a%=3 // a = 1
d. 대입 연산의 예시
❔ 예제
#include <iostream>
using namespace std;
int main(void)
{
int num1 = 8;
int num2 = 8;
int num3 = 8;
num1 = num1 + 5;
num2 += 5;
num3 =+ 5;
cout << "- 연산자에 의한 결괏값은 " << num1 << "입니다." << endl;
cout << "+= 연산자에 의한 결괏값은 " << num2 << "입니다." << endl;
cout << "=+ 연산자에 의한 결괏값은 " << num3 << "입니다.";
return 0;
}
✨ 실행결과
- 연산자에 의한 결괏값은 13입니다.
+= 연산자에 의한 결괏값은 13입니다.
=+ 연산자에 의한 결괏값은 5입니다. //단순히 숫자 5를 변수 num3에 대입하는 연산
4. 증감연산자 (increment and decrement operator)
a. 증감연산자란?
🌟 피연산자를 1씩 증가 혹은 1씩 감소시킬 때 사용하는 연산자
b. 증감 연산의 특징
피연산자가 단 하나뿐인 단항 연산자
해당 연산자가 피연산자의 어느 쪽에 위치하는가에 따라 연산의 순서 및 결과가 달라짐
증감 연산된 변수의 값은 변경된다
c. 증감 연산자의 종류
증감 연산자
설명
++x
먼저 값을 1 증가 후, 해당 연산 진행
x++
해당 연산 후, 값을 1 증가
--x
먼저 값을 1 감소 후, 해당 연산 진행
x--
해당 연산 후, 값을 1 감소
d. 증감 연산자의 연산 순서
🤓 예제
#include <iostream>
using namespace std;
int main(void)
{
int x = 10;
int y = x-- + 5 + --x;
cout << "변수 x의 값은 " << x<< "이고, 변수 y의 값은 " << y << "로 변했습니다.";
return 0;
}
✨ 실행결과
변수 x의 값은 8이고, 변수 y의 값은 23로 변했습니다.
📝 예제 설명
① : 덧셈 연산이 먼저 수행 (10 + 5)
② : x의 감소 연산이 수행 (x의 값 : 9)
③ : 감소연산 수행 (x의 값 : 8)
④ : 덧셈 연산이 수행 (15 + 8)
⑤ : 마지막으로 대입 연산이 수행 (y의 값 : 23)
e. 증감 연산의 예제
🤓 예제
#include <iostream>
using namespace std;
int main(void)
{
int num1 = 8;
int num2 = 8;
int result1, result2;
result1 = --num1 + 5;
result2 = num2-- + 5;
cout << "전위 감소 연산자에 의한 결괏값은 " << result1 << "이고, 변수의 값은 " << num1 << "로 변했습니다.";
cout << endl;
cout << "후위 감소 연산자에 의한 결괏값은 " << result2 << "이고, 변수의 값은 " << num2 << "로 변했습니다.";
return 0;
}
✨ 실행결과
전위 감소 연산자에 의한 결괏값은 12이고, 변수의 값은 7로 변했습니다.
후위 감소 연산자에 의한 결괏값은 13이고, 변수의 값은 7로 변했습니다.
5. 비교 연산자
a. 비교 연산자란?
🌟 피연산자 사이의 상대적인 크기를 판단하는 연산자
b. 비교 연산의 특징
두 개의 피연산자를 가지는 이항 연산자
피연산자들의 결합 방향 : ➡
c. 비교 연산자의 종류
증감 연산자
설명
==
왼쪽의 값과 오른쪽 값이 같으면 1
!=
왼쪽 값과 오른쪽 값이 같지 않으면 1
>
왼쪽 값이 오른쪽 값보다 크면 1
>=
왼쪽 값이 오른쪽 값보다 크거나 같으면 1
<
왼쪽 값이 오른쪽 값보다 작으면 1
<=
왼쪽 값이 오른쪽 값보다 작거나 같으면 1
💙 INFO
컴퓨터에서 참(true)은 보통 1로 표현되고, 거짓(false)은 0으로 표현되지만 C(++)에서는 참(true)은 0이 아닌 모든것, 거짓(false)은 동일하게 0
d. 비교 연산자의 예시
🤓 예제
int num01 = 3;
int num02 = 7;
cout << "!= 연산자에 의한 결괏값은 " << (num1 != num2) << "입니다." << endl;
cout << ">= 연산자에 의한 결괏값은 " << (num1 >= num2) << "입니다.";
🌟 조건식의 참 거짓을 따져 반환값(값, 수식, 함수 호출 등)을 달리 할 수 있는 연산자
조건식의 값이 참이면 반환값1, 거짓이면 반환값 2를 반환함
짧은 if / else 문 대신에 사용할 수 있으며, 코드를 간결하게 작성할 수 있도록 도와줌
📘 문법
조건식 ? 반환값1 : 반환값2
b. 삼항 연산의 특징
유일하게 피연산자를 세개나 가짐
if / else 문 대신 사용 가능
c. 삼항 연산의 예시
🤓 예제
#include <iostream>
using namespace std;
int main(void)
{
int num1 = 11;
int num2 = 10;
int result;
result = (num1 < num2) ? num1 : num2;
cout << "둘 중에 더 작은수는 " << result << "입니다.";
return 0;
}
✨ 실행결과
둘 중에 더 큰수는 10입니다.
9. 쉼표 연산자
a. 쉼표 연산자란?
🌟 어떠한 연산을 수행하는 것이 아니라 두 연산식을 하나로 나타내거나, 둘 이상의 인수를 함수로 전달하고자 할 때 사용
b. 쉼표 연산의 예시
🤓 예제
#include <iostream>
using namespace std;
int main(void)
{
int num1 = 15, num2 = 8;
cout << "첫 번째 수는 " << num1 << "이고, 두 번째 수는 " << num2 << "입니다.";
return 0;
}
✨ 실행결과
첫 번째 수는 15이고, 두 번째 수는 8입니다.
10. sizeof 연산자
a. sizeof 연산자란?
🌟 피연산자 형식의 개체를 저장하기 위해 필요한 스토리지 공간(바이트)을 제공하고 알려주는 역할
사용자의 컴퓨터 환경에 따라 타입에 할당되는 메모리의 크기가 달라질 수 있어서 이 연산자를 사용하면 컴퓨터 환경에서의 타입 크기를 알아볼 수 있음
char형 데이터에 할당되는 메모리의 크기는 1 바이트입니다.
short형 데이터에 할당되는 메모리의 크기는 2 바이트입니다.
int형 데이터에 할당되는 메모리의 크기는 4 바이트입니다.
long형 데이터에 할당되는 메모리의 크기는 8 바이트입니다.
long long형 데이터에 할당되는 메모리의 크기는 8 바이트입니다.
float형 데이터에 할당되는 메모리의 크기는 4 바이트입니다.
double형 데이터에 할당되는 메모리의 크기는 8 바이트입니다.
long double형 데이터에 할당되는 메모리의 크기는 16 바이트입니다.
11. 포인터 연산자
a. 포인터 연산자 (*) 란?
🌟 포인터 변수 주소 값에 있는 데이터를 출력하는 연산자
++ 예전에 변수를 공부하면서 배웠듯, 변수는 데이터가 저장된 주소와, 데이터의 길이나 형태에 관한 정보도 같이 기억해야 한다!!
b. 주소 연산자 (&) = 번지 연산자 = 참조 연산자
🌟 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환
'&'기호는 앰퍼샌드(ampersand)라고 읽음
c. 포인터 연산자의 예시
🤓 예제 : 정수를 가리키는 포인터와 포인터를 사용해서 접근하기
#include <iostream>
int main() {
int number = 42; // 정수 변수 선언 및 초기화
int* pointer = &number; // 포인터 변수 선언 및 정수 변수의 주소를 할당
std::cout << "변수 number의 값: " << number << std::endl;
std::cout << "포인터 pointer가 가리키는 값: " << *pointer << std::endl;
// 포인터를 사용하여 변수의 값을 변경
*pointer = 99;
std::cout << "변수 number의 값 (포인터를 통해 변경 후): " << number << std::endl;
return 0;
}
✨ 실행결과
변수 number의 값: 42
포인터 pointer가 가리키는 값: 42
변수 number의 값 (포인터를 통해 변경 후): 99
💥 WARNING
*이 붙은 변수는 무조건 데이터를 받아와야 하는데, 위의 예시에서 이미 *p라고 포인터 변수라고 선언한 변수에 p = 4라고 해버리면 주소값을 가르켜야 하는 곳에 데이터를 대입해버려서 치명적 오류가 생김
비슷한 경우로 *p = &b를 하는 경우에도 p의 주소값은 변하지 않고, 데이터도 엉뚱한 값으로 출력됨
12. C++ 연산자 : 범위 지정 연산자
a. 범위 지정 연산자란?
🌟 여러 범위에서 사용된 식별자(identifier)를 식별하고 구분하는데 사용하는 연산자
👉 특히 클래스 내부에서 정적 멤버 변수 또는 정적 멤버 함수에 접근할 때 사용
식별자로 변수, 함수, 열거체가 올 수 있음
📘 문법
1. ::식별자
2. 클래스이름::식별자
3. 네임스페이스::식별자
4. 열거체::식별자
b. 범위 지정 연산자의 특징
가장 우선순위가 높은 연산자는 바로 범위 지정 연산자
c. 범위 지정 연산자의 예제
🤓 예제 : 범위 지정 연산자를 사용한 예시
#include <iostream>
class MyClass {
public:
static int myStaticVariable; // 정적 멤버 변수 선언
static void myStaticFunction() { // 정적 멤버 함수 선언
std::cout << "MyClass의 정적 멤버 함수 호출됨" << std::endl;
}
};
// 정적 멤버 변수의 초기화
int MyClass::myStaticVariable = 42;
int main() {
// 정적 멤버 변수에 접근
std::cout << "MyClass의 정적 멤버 변수 값: " << MyClass::myStaticVariable << std::endl;
// 정적 멤버 함수 호출
MyClass::myStaticFunction();
return 0;
}
✨ 실행결과
MyClass의 정적 멤버 변수 값: 42
MyClass의 정적 멤버 함수 호출됨
13. C++ 연산자 : 멤버 포인터 연산자
a. 멤버 포인터 연산자란?
🌟 클래스의 멤버를 가리키는 포인터를 정의
📘 문법
1. 클래스타입의객체.*멤버이름 //왼쪽의 피연산자가 클래스 타입의 객체
2. 클래스타입객체의포인터->*멤버이름 //왼쪽의 피연산자가 클래스 타입의 객체를 가리키는 포인터
b. 범위 지정 연산자의 예제
🤓 예제 : 멤버 포인터 연산자를 사용한 예시
#include <iostream>
class MyClass {
public:
int myMemberVariable; // 멤버 변수 선언
MyClass(int value) : myMemberVariable(value) {} // 생성자
void myMemberFunction() { // 멤버 함수
std::cout << "MyClass의 멤버 함수 호출됨" << std::endl;
}
};
int main() {
MyClass obj(42); // MyClass 객체 생성 및 초기화
int MyClass::*memberVarPtr = &MyClass::myMemberVariable; // 멤버 변수 포인터 선언 및 초기화
void (MyClass::*memberFuncPtr)() = &MyClass::myMemberFunction; // 멤버 함수 포인터 선언 및 초기화
// 멤버 변수에 접근하여 값을 출력
std::cout << "멤버 변수 값: " << obj.*memberVarPtr << std::endl;
// 멤버 함수를 호출
(obj.*memberFuncPtr)();
return 0;
}
✨ 실행결과
멤버 변수 값: 42
MyClass의 멤버 함수 호출됨
14. C++ 연산자 : typeid 연산자
a. typeid 연산자란?
🌟 객체의 타입에 관한 정보를 확인
💙 사용하는곳
1) 런타임에 객체의 타입을 결정할때
2) 템플릿에서 템플릿 매개변수의 타입을 결정할 때
📘 문법
typeid(표현식)
b. typeid의 예제
🤓 예제
#include <iostream>
#include <typeinfo>
int main() {
int x = 42;
double y = 3.14;
// typeid를 사용하여 변수의 타입 정보 출력
std::cout << "x의 타입: " << typeid(x).name() << std::endl;
std::cout << "y의 타입: " << typeid(y).name() << std::endl;
// typeid를 사용하여 변수의 타입 비교
if (typeid(x) == typeid(y)) {
std::cout << "x와 y의 타입은 같습니다." << std::endl;
} else {
std::cout << "x와 y의 타입은 다릅니다." << std::endl;
}
return 0;
}