[C++] 비트 연산자, 쉼표 연산자, 삼항 연산자, sizeof 연산자

2022. 6. 9. 16:58♣ C++

이번 포스팅에선 C++의 비트/ 쉼표/ 삼항/ sizeof 연산자에 대해 알아보도록 하겠습니다.

비트 연산자 : 논리 연산자와 비슷하지만, Bit 단위로 논리 연산을 할 때 사용

쉼표 연산자 : 다양한 용도로 사용. 두 연산식을 하나의 연산식으로 나타낼 때 사용

삼항 연산자 : C++에서 유일하게 피연산자를 세 개나 가지는 조건 연산자

sizeof 연산자 : 피연산자의 크기를 바이트 단위로 반환

 

개발 환경 : VSCode, Windows 10

 

 

 

 

 

기본 개발 세팅은 다음과 같습니다.

#include <iostream>
#include <string.h>
using namespace std;

int main()

{    
    // 연산자
    int num1 = 10;
    int num2 = 4;
    cout << "연산자 예시 \n";
    return 0;
}

 

 

 

 

 

 

 

비트 연산자


비트 연산자는 Bit 단위로 논리 연산을 할 때 사용합니다.

예를 들면, 숫자 2를 2진수로 나타내면 00000010 입니다.

이때 0과 1이 Bit이며, 이 값들을 기준으로 논리 연산을 하는 것이 비트 연산자입니다.

 

 

 

[~]

0을 1로, 1을 0으로 바꾸는 연산자입니다. 

 

int main()

{    
    // 대입 연산자
    int num1 = 10;
    int num2 = 4;
    cout << "~ 연산자의 결과값은 " << (~num1) << " 입니다." << endl;
    return 0;
}

 

결과

~ 연산자의 결과값은 -11 입니다.

비트 단위로 연산되었으며, 전혀 다른 수가 나온 것을 확인할 수 있습니다.

 

 

 

 

 

[<<, >>]

오른쪽(>>), 혹은 왼쪽(<<)으로 지정된 수만큼 비트를 옮깁니다.

한 칸 옮겨질 때마다 2배씩 수가 커지고 작아집니다.

 

int main()

{    
    // 대입 연산자
    int num1 = 10;
    int num2 = 4;
    cout << "<< 연산자의 결과값은 " << (num1 << 2) << " 입니다." << endl;
    cout << ">> 연산자의 결과값은 " << (num2 >> 2) << " 입니다." << endl;
    return 0;
}

 

결과

<< 연산자의 결과값은 40 입니다.
>> 연산자의 결과값은 1 입니다.

num1 은 2칸 왼쪽으로 옮겨지면서 4배가 되었으며, num2 는 2칸 오른쪽으로 옮겨지면서 1/4배가 되었습니다.

 

 

 

 

 

 

[&, |, ^]

& : 대응되는 비트가 모두 1이면 1을 반환합니다.

| : 대응되는 비트가 하나라도 1이면 1을 반환합니다.

^ : 대응되는 비트가 서로 다르면 1을 반환합니다. 

 

int main()
{    
    // 대입 연산자
    int num1 = 10;
    int num2 = 4;
    cout << "& 연산자의 결과값은 " << (num1 & num2) << " 입니다." << endl;
    cout << "| 연산자의 결과값은 " << (num2 | num2) << " 입니다." << endl;
    cout << "^ 연산자의 결과값은 " << (num1 ^ num2) << " 입니다." << endl;
    return 0;
}

 


결과

& 연산자의 결과값은 0 입니다.
| 연산자의 결과값은 4 입니다.
^ 연산자의 결과값은 14 입니다.

 

num1num2 의 비트를 비교(&)했을 때, 결과값은 0이 나왔습니다.

num2num2 비교(|)의 경우, 서로 같기 때문에 같은 값이 나왔습니다.

num1num2 를 비교한 결과, 서로 다른 비트가 몇 있었고 그에 따라 예상치 못한 숫자가 나왔습니다.

 

 

 

 

 

 

쉼표 연산자


두 연산식을 하나의 연산식으로 나타낼 때 사용합니다.

* 아주 간단!

 

    int num1 = 10, num2 = 4;
    cout << "첫 번째 수는 " << num1 << " 이고, 두 번째 수는 " << num2 << " 입니다. \n\n";

 

결과

첫 번째 수는 10 이고, 두 번째 수는 4 입니다.

원래는 따로따로 int 변수명 = 정수 를 설정해줬지만, 쉼표를 이용하여 한 줄에 간편하게 나타낼 수 있습니다.

 

 

 

 

 

 

 

삼항 연산자


C++에서 유일하게 피연산자를 세 개나 가지는 조건 연산자입니다. 

 

 

[조건식 ? 반환값 1: 반환값 2]

조건식이 참일 경우, 반환값1 을 반환합니다.

조건식이 거짓일 경우, 반환값2 를 반환합니다.

 

int main()

{    
    // 대입 연산자
    int num1 = 10, num2 = 4;
    int result8, result9, result10;
    result8 = (num1 < num2) ? num1: num2;
    cout << "둘 중에 더 작은 수는 " << result8 << " 입니다. \n";
    result9 = (num1 != num2) ? 1 : 0;
    cout << "두 수가 다르다면 " << result9 << " 을 반환합니다. \n";
    result10 = (num1+2 == num2) ? 1 : 0;
    cout << "둘 수가 같다면 " << result10 << " 을 반환합니다. \n\n";
}

 

결과

둘 중에 더 작은 수는 4 입니다. 
두 수가 다르다면 1 을 반환합니다.
둘 수가 같다면 0 을 반환합니다.

num1 보다 num2 가 더 작기 때문에, num2 가 반환되었습니다. 

둘의 수는 같지 않기 때문에 1을 반환했습니다.

num1+2 보다 num2 가 작기 때문에 0을 반환했습니다.

 

 

 

 

 

 

 

sizeof 연산자


피연산자의 크기를 바이트 단위로 반환합니다.

 

 

[sizeof(피연산자)]

sizeof() 함수에 피연산자를 집어넣으면, 그 크기를 반환합니다.

 

int main()

{    
    // 대입 연산자
    int num1 = 10, num2 = 4;
    string ages = "C++ 최고";
    string text = "나는야 최고의 프로그래머";
    cout << " num1 데이터에 할당되는 메모리의 크기는 " << sizeof(num1) << " 바이트입니다." << endl;
    cout << " num2 데이터에 할당되는 메모리의 크기는 " << sizeof(num2) << " 바이트입니다." << endl;
    cout << " '나는야 최고의 프로그래머' 데이터에 할당되는 메모리의 크기는 " << sizeof(text) << " 바이트입니다." << endl;
    cout << " 'C++ 최고'의 메모리의 크기는 " << sizeof(ages) << " 바이트입니다." << endl;
    cout << " short형 데이터에 할당되는 메모리의 크기는 " << sizeof(short) << " 바이트입니다." << endl;
    cout << " long형 데이터에 할당되는 메모리의 크기는 " << sizeof(long) << " 바이트입니다." << endl;
    cout << " long long형 데이터에 할당되는 메모리의 크기는 " << sizeof(long long) << " 바이트입니다." << endl;
    cout << " 3.14 데이터에 할당되는 메모리의 크기는 " << sizeof(3.14) << " 바이트입니다." << endl;
    cout << " double형 데이터에 할당되는 메모리의 크기는 " << sizeof(double) << " 바이트입니다." << endl;
    cout << "long double형 데이터에 할당되는 메모리의 크기는 " << sizeof(long double) << " 바이트입니다. \n" << endl;
}

 

 

결과

 num1 데이터에 할당되는 메모리의 크기는 4 바이트입니다.
 num2 데이터에 할당되는 메모리의 크기는 4 바이트입니다.
 '나는야 최고의 프로그래머' 데이터에 할당되는 메모리의 크기는 24 바이
트입니다.
 'C++ 최고'의 메모리의 크기는 24 바이트입니다.
 short형 데이터에 할당되는 메모리의 크기는 2 바이트입니다.
 long형 데이터에 할당되는 메모리의 크기는 4 바이트입니다.
 long long형 데이터에 할당되는 메모리의 크기는 8 바이트입니다.       
 3.14 데이터에 할당되는 메모리의 크기는 8 바이트입니다.
 double형 데이터에 할당되는 메모리의 크기는 8 바이트입니다.
long double형 데이터에 할당되는 메모리의 크기는 12 바이트입니다.

num1num2 는 안의 내용은 다르지만 똑같은 int 형 타입이기에 같은 크기의 메모리가 할당되었습니다.

string 변수인 ages, text 도 서로 같은 크기의 메모리가 할당되었습니다.

이를 통해, 컴퓨터는 같은 타입의 데이터는 똑같은 크기의 메모리를 할당함을 알 수 있습니다.

 

 

 

 

지금까지 비트/ 쉼표/ 삼항/ sizeof 연산자를 알아보았습니다. 

다음 포스팅에선 조건문과 반복문에 대해 다뤄보도록 하겠습니다.