wellcome_공부일기

C++ | 03.04 sizeof, 쉼표 그리고 조건(부) 연산자 본문

프로그래밍/C++

C++ | 03.04 sizeof, 쉼표 그리고 조건(부) 연산자

ma_heroine 2020. 5. 16. 21:13

<목차>

1. 사이즈 연산자(Sizeof operator)

2. 쉼표 연산자(Comma operator)

3. 조건부 연산자(Conditional operator)

 

 

 

사이즈 연산자(Sizeof operator)

#include <iostream>
using namespace std;


int main()
{
    // 4byte = 32bit
    float a;
    cout << sizeof(float) << endl;
    cout << sizeof a << endl; 

    return 0;
}

- sizeof는 연산자(operator)로, 데이터 형의 크기를 알고 싶을 때 사용합니다.

- 사용 단위는 바이트(byte)입니다.

- sizeof 연산자에는 데이터 타입은 물론 변수명으로도 해당 데이터 형의 크기를 알 수 있습니다. 

- 하지만 데이터 타입일 때는 괄호 ()가 무조건 있어야 하고, 변수명일 경우에는 없어도 됩니다.

 

 

 쉼표 연산자(Comma operator)

#include <iostream>
using namespace std;


int main()
{
    int x = 3;
    int y = 10;
    int z = (++x, ++y);
    
    // output: 4 11 11
    cout << x << " " << y << " " << z  << endl;
    return 0;

}

쉼표 연산자(Comma operator)은 앞에 식을 계산 후, 뒤의 식을 계산하고 나서 뒤의 식의 값을 변수에 대입시키는 기능을 가집니다.

- int z = (++x, ++ y);이라는 식은 x를 계산 후, y를 계산하고 z에 y값을 대입시킨다는 뜻입니다.

- 아래와 같이 풀어 쓸 수 있습니다.

++x;
++y;
int z = y;

 

 

※ 쉼표 연산자(Comma operator) 주의사항

#include <iostream>
using namespace std;


int main()
{
    int a = 1, b = 10; 
    int z;
    
    z = a, b; 

    cout << z << endl; //output: 1
    
    return 0;

}

- int a = 1, b = 10;에서 쉼표는 구분 기능을 하는 연산자입니다.

- 쉼표 연산자는 대입 연산자보다 우선순위가 낮기 때문에 z에 바로 a를 대입하여 1이 나온 것을 확인할 수 있습니다.

- 위 상황을 표현하면, (z = a), b 와 같은 식으로 실행되었습니다.

 

- 이를 분명하게 하기 위해 괄호를 사용하여, z=(a,b); 와 같이 원하는 바를 아래와 같이 명확히 표기해줍니다.

#include <iostream>
using namespace std;

int main()
{
    int a = 1, b = 10;
    int z;
    z=(a,b);
   
    cout << z << endl; //output: 10
    
    return 0;

}

 

- 참고로, Prefix와 Postfix된 두 경우 모두, a의 값은 2로 증가합니다. 

#include <iostream>
using namespace std;

int main()
{
    int a = 1, b = 10;
    int z;
    z = (++a, a+b);

    // output: 2 10 12
    cout << a << " " << b << " " << z << endl;
    
    return 0;

}

 

 

조건부 연산자(Conditional operator)

#include <iostream>
using namespace std;

int getPrice(bool onSale)
{
    if (onSale)
        return 10;
    else
        return 100;
}

int main()
{
    bool onSale = true;

    const int price = (onSale == true) ? 10:100;
 
    cout << price << endl; //output: 10

    return 0;
}

- 조건부 연산자는 연산자가 유일하게 3개인 삼항 연산자입니다. 

- 조건을 처리할 때, if를 처리하지 않습니다.

 

#include <iostream>
using namespace std;

int getPrice(bool onSale)
{
    if (onSale)
        return 10;
    else
        return 100;
}

int main()
{
    bool onSale = true;
    
    int price = getPrice(onSale);

    if (onSale)
        price = 10;
    else
        price = 100;

    cout << price << endl;

    return 0;

}

- 조건부 연산자 대신 if문을 사용하고 싶다면 아래와 같이 함수를 분리하면 됩니다.

- 첫번째 코드블럭과 차이점은, 첫번째의 경우에는 const를 사용하여 값이 변하지 않도록 설정할 수 있었으나, 

if문을 사용한 두번째 경우에는, price의 값에 대입이 일어나 const를 사용할 수 없습니다.

 

※ 조건부 연산자(Conditional operator) 주의사항

#include <iostream>
using namespace std;

int main()
{
    int x = 5;
    
    cout << ((x%2 ==0 ) ? "even" : "odd" ) << endl;

    return 0;

}

- "even" 혹은 "odd"의 문자열을 출력하도록 유도되었는데, "odd" 자리에 0을 넣으면 안됩니다. ex. "even" : 0

- "even"은 문자열, 0은 정수형으로 타입이 달라 오류가 일어납니다.

- CLion에서는 Process finished with exit code 11 와 같은 오류가 일어납니다.

 

 

 

 

 

 

 

* 해당 글은 홍정모님의 따라 배우는 C++을 공부한 토대로 작성되었습니다.

 

 

 

Comments