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 입니다.
num1 과 num2 의 비트를 비교(&)했을 때, 결과값은 0이 나왔습니다.
num2 와 num2 비교(|)의 경우, 서로 같기 때문에 같은 값이 나왔습니다.
num1 와 num2 를 비교한 결과, 서로 다른 비트가 몇 있었고 그에 따라 예상치 못한 숫자가 나왔습니다.
쉼표 연산자
두 연산식을 하나의 연산식으로 나타낼 때 사용합니다.
* 아주 간단!
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 바이트입니다.
num1 과 num2 는 안의 내용은 다르지만 똑같은 int 형 타입이기에 같은 크기의 메모리가 할당되었습니다.
string 변수인 ages, text 도 서로 같은 크기의 메모리가 할당되었습니다.
이를 통해, 컴퓨터는 같은 타입의 데이터는 똑같은 크기의 메모리를 할당함을 알 수 있습니다.
지금까지 비트/ 쉼표/ 삼항/ sizeof 연산자를 알아보았습니다.
다음 포스팅에선 조건문과 반복문에 대해 다뤄보도록 하겠습니다.
'♣ C++' 카테고리의 다른 글
[C++] 1차원 배열, 다차원 배열 (0) | 2022.06.11 |
---|---|
[C++] 조건문과 반복문을 활용해봅시다. (0) | 2022.06.10 |
[C++] 비교 연산자, 논리 연산자 (0) | 2022.06.02 |
[C++] 산술 연산자, 대입 연산자 (0) | 2022.06.01 |
[C++] C++ 개발 환경 세팅 ft. VSCode (0) | 2022.05.29 |