일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 나동빈님
- sizeof()
- Andrew Ng
- algorithm
- C++
- decimal
- coursera
- 프로그래밍
- 연산자
- #endif
- #define
- compile time constants
- 기계학습 기초
- const
- 코딩테스트
- 단항연산자
- 형변환
- 이코테
- 홍정모님
- 기계학습
- regression problem
- classification problem
- 본즈앤올
- Machine Learning
- CLion
- standford University
- 학습 알고리즘
- Greedy
- 코드블럭 오류
- Runtime constants
- Today
- Total
wellcome_공부일기
C++ | 03.04 sizeof, 쉼표 그리고 조건(부) 연산자 본문
<목차>
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++을 공부한 토대로 작성되었습니다.
'프로그래밍 > C++' 카테고리의 다른 글
C++ | 03.06 논리 연산자(Logical operator) (0) | 2020.05.18 |
---|---|
C++ | 03.05 관계 연산자(Relational operator) (0) | 2020.05.17 |
C++ | 03.03 증가/ 감소 연산자(Increment/ Decrement) 주의사항 (0) | 2020.05.15 |
C++ | 03.02 산술 연산자(Arithmetic operator) (0) | 2020.05.14 |
C++ | 03.01 연산자 우선순위와 결합법칙(Operator precedence and associativity ) (0) | 2020.05.13 |