함수보단 연산자(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;
}

+ Recent posts