[C++] 표현식

dada·2024년 10월 23일
0

C++

목록 보기
4/7

0. 표현식

  • 표현식은 특정 값을 가진 엔티티(개체)이며 메모리의 상태를 변경할 수도 있음
  • 표현식의 예와 우선순위

1. 기본 표현식

  • 기본 표현식 primary expression은 연산자 없이 구성된 간단한 표현식
  • 기본 표현식은 조합을 더해서 더 복잡한 표현식을 구성하게 됨

1-1. 리터럴 표현식

  • 리터럴은 값을 나타내지만 부가 작용이 없는 표현식
  • ex) false(boolean literal), 1897234L(long integer literal), ‘A’(character literal), 245.78F(float literal), “Hello”(string literal), 114.7892(double literal), 234(integer literal), 245.784321L(long double literal)
    • 참고로 short 리터럴은 없다

1-2. 괄호 표현식

  • 이름
    • 이름으로 사용되는 식별자는 변수, 객체 이름, 함수 이름 등에 사용
      • ex) x(변수 이름), cout(객체 이름), std::cout(namespace의 이름)
  • 괄호 표현식
    • 우선순위가 낮은 표현식을 기본 표현식으로 변경하고 싶을 때 괄호로 묶음
      • ex) (x+3)5 → x+3 후 5 실행
      • ex) 12/(x+2) → x+2 후 12/ 실행

2. 단항 표현식

: 하나의 피연산자에 대해 단항 연산자가 적용된 표현식

ex) Applying plus and minus operator

int x = 4; 
int y = -10;

cout << "Using plus operator on x:" << +x << endl; // 4
cout << "Using plus operator on x:" << -x << endl; // -4

cout << "Using plus operator on x:" << +y << endl; // 10
cout << "Using plus operator on x:" << -y << endl; // -10

2-1. sizeof 표현식

sizeof expression // finds the size of an expression
sizeof(type) // finds the size of a type

cout << sizeof(int) << endl; // 4

2-2. 곱셈 표현식

  • 곱셈
    • 두 수를 곱할 때 * 기호를 사용
    • 피연산자 2개의 자료형이 같지 않으면 자료형 변환 발생
  • 나눗셈
    • 두 수를 나눌 때 / 기호를 사용
    • 피연산자 2개가 정수(int 자료형 등)라면 결과가 정수로 나옴
    • 피연산자가 하나라도 부동 소수점(double 등)이라면 결과는 부동소수점으로 나옴
  • 나머지
    • 어떤 값을 다른 값으로 나눈 나머지를 구할 때 % 기호를 사용
//multiplication
cout << 3*4 << endl; // 12
cout << 3.0*4 << endl; // 12.0

//division
cout << 30/5 << endl; // 6
cout << 4/7 << endl; // 0 -> integer 결과 

//remainder
cout << 30%5 << endl; // 0

3. 할당 표현식

3-1. 단순 할당

  • 변수 = 피연산자 로 = 기호를 사용
int x; 
int y;

cout << (x=14) << endl; // 14
cout << (y=87) << endl; // 87

3-2. 복합 할당

  • 할당 연산자(=)와 오른쪽에 있는 연산자를 결합해서 연산자를 사용
  • ex: +=, -=, …

int x = 20;
int y = 30;
int z = 40;
int t = 50;
int u = 60;

x += 5;
y -= 3;
z *= 10;
t /= 8;
u %= 7;

cout << x << ", " << y << ", " << z << ", " << t << ", " << u << endl; // 25 27 400 6 4

4. 암묵적 자료형 변환

  • 서로 다른 자료형을 연산하면 C++ 컴파일러는 연산 전에 암묵적 자료형 변환을 수행

4-1. 암묵적 자료형 승격

  • 암묵적 자료형 승격은 산술 연산자의 피연산자에 자동으로 적용
  • boolint(승격 후)
  • charint
  • shortint
  • unsigned shortunsigned int
  • floatdouble
#include <typeinfo> // 꼭 추가해줘야 typeid를 사용할 수 있음

bool x = true;
char y = 'A';
short z = 14;
float t = 24.5;

cout << typeid(x+100).name() << endl; // i: integer
cout << x+100 << endl; // 101

cout << typeid(y+1000).name() << endl; // i
cout << y+1000 << endl; // 10665

cout << typeid(z*100).name() << endl; // i
cout << z*100 << endl; // 1400

cout << typeid(t+15000.2).name() << endl; // d: double
cout << t+15000.2 << endl; // 15024.7

4-2. 암묵적 자료형 변환

  • 암묵적 자료형 변환 - 부가작용 x
#include <typeinfo>

int x = 123;
long y = 140;
double z = 114.56;

cout << typeid(x+y).name() << endl; // l: long
cout << x+y << endl; // 263

cout << typeid(x+y+z).name() << endl; // d: double
cout << x+y+z << endl; // 377.56
  • 암묵적 자료형 변환 - 부가작용 o
#include <typeinfo>

int x;
double y;

x = 23.67; // x = 23 -> 암묵적 자료형 변환(데이터 손실로 부작용)
y = 130; // y = 130.0

cout << typeid(x=23.67).name() << endl; // i: integer - x가 int형이므로 
cout << x << endl; // 23

cout << typeid(y=130).name() << endl; // d: double - y가 double형이므로 타입은 double
cout << y << endl; // 130 - 130.0이 아닌 이유: cout은 double을 출력할 때 .0은 출력 x
profile
AI, Python 등 공부용 블로그

0개의 댓글