함수보단 연산자(Operator)를 사용하는 게 편하다.
한식에 더하기,곱하기가 있으면 우선순위를 정해야 한다.
기본상식
- ()가 없어도 + 보단 *가 먼저다.
- ()가 있으면 우선순위 변경된다.
결합법칙 *,/가 있으면 우선순위가 어찌 정해질까?
*,/,%는 같은 우선순위를 가지고 있다.
Left to Right형식으로 왼쪽부터 계산한다.
위와 같은 룰들이 있지만 ()를 통해 우선순위를 명확히 표현하는 것이 좋다.
Unary plus
*는 +보다 우선순위가 높지만 +3,-3은 우선 순위가 높다.
2^3은 2의 3제곱이아니다.
cmath를 사용해 제곱한다.
#include <iostream>
//제곱 사용
#include <cmath>
using namespace std;
int main()
{
//함수보단 연산자(Operator)를 사용하는게 편하다.
//한식에 더하기,곱하기가 있으면 우선순위를 정해야한다.
//()가 없어도 + 보단 *가 먼저다.
//()가 있으면 우선순위 변경된다.
int x = 4 + 2 * 3;
x = (4 + 2) * 3;
//결합법칙 *,/가 있으면 우선순위가 어찌 정해질까?
// *,/,% 같은 우선순위를 가지고 있다.
//Left to Right형식으로 왼쪽부터 계산한다.
x = 3 * 4 / 2;
//위와 같은 룰들이 있지만 ()를 통해 우선순위를 명확히 표현하는것이 좋다.
//Unary plus
//+3,-3은 우선 순위가 높다.
x = +3;
x = 3 + -3;
//2^3은 2의 3제곱이아니다.
//cmath를 사용해 제곱한다.
x = std::pow(2, 3);
cout << x << endl;
return 0;
}
/ 는 나누기이다.
c++에서 int,float 나누기는 서로 다르다.
숫자가 하나라도 실수라면 실수로 출력된다.
int형을 나누기 하게되면 정수이여야 하기 때문에 소수를 절삭한다.
% 나머지연산자는 왼쪽 숫자의 부호를 따른다.
#include <iostream>
int main()
{
using namespace std;
int x = 1;
int y = -x;
cout << y << endl;
y = 2;
int z = x + y;
cout << z << endl;
//% 는 나머지이다.
//int,float 나머지는 서로 다르다.
//숫자가 하나라도 실수라면 실수로 출력된다.
x = 7;
y = 4;
cout << x / y << endl;
cout << float(x) / y << endl;
//int형이면 정수이여야하기 때문에 0.5를 절삭한다.
//2가 출력된다.
cout << -5 / 2 << endl;
//% 나머지연산자는 왼쪽숫자의 부호를 따른다.
cout << -5 % 2 << endl;
//x가 가르키고있는 메모리의 정보를 z가 가르키고있는 메모리에 저장한다.
z = x;
//z = z + y;와 같다.
//코딩할 때 코드의 양을 줄여준다.
//오타를 줄일 수 있다.
//+=,*=,/=,%= 다 가능하다.
z += y;
return 0;
}
증감연산자
많이 쓰이고 쉽지만 실수할 때가 많다.
++,--의 특징은 앞에 붙일 수 있고 뒤에도 붙일 수 있다.
++,--가 앞에 붙으면 먼저 계산하지만 뒤에 붙으면 작업 후 마지막에 계산한다.
#include <iostream>
using namespace std;
int add(int a, int b)
{
return a + b;
}
int main()
{
int c = 6;
//아래형식으로 코딩하면 안된다.
//cout << add(c, ++c) << endl;
int y = 2;
cout << add(c, ++y) << endl;
return 0;
}
sizeof
데이터형의 크기를 알고 싶을 때 사용한다.
struct, class 등 사용자가 만든 자료형도 크기를 확인할 수 있다.
Byte로 출력된다.
int = 4Byte = 32bit
sizeof는 연산자(operator)이다.
쉼표 연산자
,comma operator
주의를 하며 사용해야 한다.
int c = (++a, ++b);는
++a;
++b;
c = b;와 같다.
c = a, b;는
왼쪽 값을 메모리에 저장한다.
,는 =보다 연산자 순위가 낮다.
뒤에 값을 넣어주고 싶다면 c = (a,b);로 해준다.
for문이 아니면 풀어서 여러 줄로 사용하는 게 좋다.
조건부 연산자(삼항 연산자)
conditioanl operator
int a = 3 > 4 ? 1 : 0;
조건이 맞다면 왼쪽 값 다르다면 오른쪽 값을 메모리에 저장한다.
#include <iostream>
using namespace std;
int main()
{
//sizeof 변수,타입 모두 넣을 수 있다.
//struct,class등 사용자가 만든 자료형도 크기를 확인할 수 있다.
cout << sizeof(int) << endl;
int a = 3;
cout << sizeof a << endl;
int b = 10;
/*int c = (++a, ++b);
cout << c << endl;
cout << a << endl;*/
int c;
c = a, b;
cout << c << endl;
bool sale = true;
//조건부연산자.
const int price = (sale == true) ? 10 : 100;
cout << price << endl;
cout << ((10 % 2 == 0) ? "GOOD" : "BAD") << endl;
return 0;
}
관계 연산자
숫자 두 개를 비교하는 연산자이다.
실전에서 일어날 수 있는 문제점들이 있다.
== 같다.
!= 다르다.
> 왼쪽이 크다.
< 오른쪽이 크다.
>= 왼쪽이 크거나 같다.
<= 오른쪽이 크거나 같다.
float부동소수점끼리 비교는 문제점이 있다.
100 - 99.99와 10 - 9.99 두 가지를 비교하면 같지 않게 나온다.
오차의 한계를 개발자가 지정해 비교한다.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double d1(100 - 99.99);
double d2(10 - 9.99);
//0.01이 출력된다.
cout << d1 << endl;
//0.01이 출력된다.
cout << d2 << endl;
cout << d1 - d2 << endl;
if (d1 == d2)
cout << "같다" << endl;
else
cout << "다르다" << endl;
//오차의 한계를 사람의 손으로 지정한다.
const double epsilon = 1e-10;
cout << epsilon << endl;
cout << std::abs(d1 - d2) << endl;
if (std::abs(d1 - d2) < epsilon)
cout << "거의 같다" << endl;
else
cout << "다르다" << endl;
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ 지역변수,범위,지속기간 (0) | 2019.07.05 |
---|---|
c++ 비트단위연산자,비트플래그란? (0) | 2019.07.04 |
c++ 문자형,리터럴상수,심볼릭상수 란? (0) | 2019.07.01 |
c++ 정수형,부동소수점수란? (0) | 2019.06.28 |
c++ namespace란? (0) | 2019.06.26 |