기본연산자

산술연산자 기능 사용 예 연산의 결과
+ 더하기 5+3 8
- 빼기 5-3 2
* 곱하기 5*3 15
/ 몫 구하기(정수일 때만) 5/3 1
나머지 구하기 5%3 2

 

증감연산자

종류 증감연산자 연산의 결과
전위형(prefix) ++x x값을 먼저 1증가시킨 후 연산에 사용되며 결과값은 1 증가한 x값이다.
--x x값을 먼저 1감소시킨 후 연산에 사용되며 결과값은 1 감소한 x값이다.
후위형(postfix) x++ x값을 먼저 연산에 사용한 후, 값을 1증가시키며 결과값은 증가하지 않은 원래의 x값이다.
x-- x값을 먼저 연산에 사용한 후, 값을 감소시키며 결과값은 감소하지 않은 원래의 x값이다. 

 

예시

#pragma warning (disable:4996)					
#pragma warning (disable:6031)	
#include <math.h>
#include <stdio.h>		

int main()
{
	int x = 10, y = 20, z = 30;

	x = ++x * 5;
	y = y++ * 5;
	z = 5 - --z;

	printf("x = %d\n", x);
	printf("y = %d\n", y);
	printf("z = %d\n", z);

	return 0;
}

 

결과

 

복합대입연산자

파이썬에서 사용했던 복합연산자와 비슷하다. (+=, -=, *=)

cf) 복합 대입 연산자를 다른 연산자와 함께 사용할 때는 주의해야한다. 복합 대입 연산자는 다른 연산자에 비해 우선 순위가 낮으므로 생각지 못한 결과가 나올 수 있다.

 

예시

int x = 2;
x = x * 3 + 2; //결과 : 8
x *= 3 + 2;  //결과: 10

 

 

관계연산자

관계연산자 의미 연산의 결과
x > y x가 y보다 큰가? 0
x >= y x가 y보다 크거나 같은가? 0
x < y x가 y보다 작은가? 1
x <= y x가 y보다 작거나 같은가? 1
x == y x가 y와 같은가? 0
x != y x가 y와 같지 않은가? 1

 

+ C언어에서 참과 거짓

  • 1) 논리값을 수치로 변환하는 규칙
  • 2) 수치를 논리값으로 변환하는 규칙

1)

논리값 수치
1
거짓 0

 

2)

수치 논리값
0이외의 값
0 거짓

 

 

논리연산자

x y 논리곱(AND) 논리합(OR) 논리부정(NOT)
x && y x || y !x
0 0 0 0 1
0 1 0 1 1
1 0 0 1 0
1 1 1 1 0

 

 

논리연산자의 단축 평가

 

(2 > 5) && (x < 3)

> && 앞의 논리값 (2 > 5)이 거짓이므로 뒤에 어떤 논리값이 나타나더라도 전체 연산의 결과는 거짓이다. 따라서 더 이상 뒤의 논리값(x < 3)을 평가하지 않는다. 

 

(2 < 5) || (x < 3)

> || 앞의 논리값 (2 < 5)이 참이므로 뒤에 어떤 논리값이 나타나더라도 전체 연산의 결과는 거짓이다. 따라서 더 이상 뒤의 논리값(x < 3)을 평가하지 않는다.

 

예시

#pragma warning (disable:4996)					
#pragma warning (disable:6031)	
#include <math.h>
#include <stdio.h>		

int main()
{
	int x = 1, y = 2;
	int result = (x < 10) || (y = x * 3);

	printf("%d\n", y);

	return 0;
}

결과

 

우리는 y에 3이 찍힐 것이라고 기대했는데 출력해보니 2가 나왔다.

result의 (x < 10)에서 이미 참이기 때문에 뒤에 연산을 해주지 않은 것이다. 

(|| 가 &&로 바뀌면 3이 출력된다.)

 

형변환 연산자

자동형변환

자동 형변환은 프로그래머가 따로 지정하지 않아도 컴파일러에 의해서 자동으로 처리되는 형변환

예를 들어 '정수 + 실수'와 같이 피연산자의 데이터 형이 다르면 자동으로 형변환이 일어나서 피연산자의 데이터형을 같게 만든 다음 필요한 연산을 수행한다. 이때, 정수형 연산은 char, short형은 int형으로 실수형 연산은 float형을 double형으로 자동변환해서 처리한다. 이처럼 작은 크기(1byte, 2byte)의 데이터형을 큰 크기(4byte)의 데이터형으로 변환하는 것을 형넓힘 변환이라고 한다. 

int i = 100;
float j = 1.23;
printf("%.2f", i + j); //i는 float로 자동 변환되어 float + float 연산을 수행한다.

 

대입연산의 경우 형좁힘이 발생할 수 있다.

int i;
i = 3.14; 

// 3.14를 int형으로 변환하면서 소수점이하를 잘라버리고 변수 i에 저장한다.
// 이와 같이 형변환 시 값의 일부가 사라질 때는 컴파일러가 경고 메시지를 보여준다.

 

강제형변환 

(int) 3.14
(float) sum

 

예시

# pragma warning(disable : 4996)
# pragma warning(disable : 6031)
# include <stdio.h>

int main()
{
	int x = 7, y = 2;
	double result = (double)x / y; 
	int c = (double)x / y;
	printf("(float)x / y = %.1lf\n", (float)x / y);

	x = 5.4 + 3.0;
	y = (int)5.4 + (int)1.2;
	printf("x = 5.4 + 3.0 = %d\n", x);
	printf("y = (int)5.4 + (int)1.2 = %d\n", y);
	printf("%.1lf\n", result);
	printf("%d", c);

	return 0;
}

결과

 

연산자의 우선순위

수학의 연산을 따른다.

(우선순위 중간에 빈 숫자들은 지금 이걸 배우는 단계에서는 크게 중요하지 않아 나중에 다뤄보고자한다.)

우선순위 분류 연산자 결합규칙
1 단항 () [] ->
2 ++ -- + - sizeof ~ ! * &
3 산술 * / %
4 + -
6 관계  < <= > >=
7 == !=
11 논리 &&
12 ||
14 대입 = += -= *= /= %= &= |= ^=
<<= >>=

 

 

예제

시간 계산 프로그램

# pragma warning(disable : 4996)
# pragma warning(disable : 6031)
# include <stdio.h>

int main()
{
	int sec;

	printf("초(sec) 입력 : ");
	scanf("%d", &sec);

	int s, m, h;

	s = sec % 60;
	m = sec / 60 % 60;
	h = sec / 60 / 60;
	
	printf("입력한 %d초는 %d시간 %d분 %d초입니다.", sec, h, m, s);

	return 0;
}

결과

 

'프로그래밍 > C,C++' 카테고리의 다른 글

C,C++ -switch문  (1) 2024.04.03
C,C++ - 제어문(if)  (0) 2024.04.03
C,C++ - 입력함수 scanf()  (0) 2024.04.02
C,C++ - 필드폭과 정밀도 지정  (0) 2024.04.02
C, C++ - 변수 생성  (0) 2024.04.01

+ Recent posts