Professional Documents
Culture Documents
쉽게 풀어쓴 C언어 Express 쉽게 풀어쓴 C언어 Express: © 2012 생능출판사 All rights reserved
쉽게 풀어쓴 C언어 Express 쉽게 풀어쓴 C언어 Express: © 2012 생능출판사 All rights reserved
이번 장에서는
수식과
* 수식과 연산자란? 연산자를
* 대입 연산 살펴봅니다.
* 산술 연산
* 논리 연산
* 관계 연산
* 우선 순위와 결합 법칙
수식(expression)
상수, 변수, 연산자의 조합
연산자와 피연산자로 나누어진다.
3.14 radius
*
연산자의 분류 연산자 의미
대입 = 오른쪽을 왼쪽에 대입
산술 +-*/% 사칙연산과 나머지 연산
부호 +-
증감 ++ -- 증가, 감소 연산
관계 > < == != >= <= 오른쪽과 왼쪽을 비교
논리 && || ! 논리적인 AND, OR
조건 ? 조건에 따라 선택
콤마 , 피연산자들을 순차적으로 실행
비트 단위 연산자 & | ^ ~ << >> 비트별 AND, OR, XOR, 이동, 반전
sizeof 연산자 sizeof 자료형이나 변수의 크기를 바이트 단위로 반환
형변환 (type) 변수나 상수의 자료형을 변환
포인터 연산자 * & [] 주소계산, 포인터가 가리키는 곳의 내용 추출
구조체 연산자 . -> 구조체의 멤버 참조
이항 연산자: 피연산자의 수가 2개
x+y
x-y
삼항 연산자: 연산자의 수가 3개
x?y:z
y mx b y = m*x + b
y ax 2 bx c y = a*x*x + b*x +c
x yx
m m = (x + y + z) / 3
3
(참고) 거듭 제곱 연산자는?
C에는 거듭 제곱을 나타내는 연산자는 없다.
x * x와 같이 단순히 변수를 두 번 곱한다.
result = x - y; // 뺄셈 연산
printf("%d - %d = %d", x, y, result); 두개의 정수를 입력하시오: 7 4
7 + 4 = 11
result = x * y; // 곱셈 연산
7-4=3
printf("%d + %d = %d", x, y, result); 7 + 4 = 28
result = x / y; // 나눗셈 연산 7/4=1
printf("%d / %d = %d", x, y, result); 7%4=3
result = x % y; // 나머지 연산
printf("%d %% %d = %d", x, y, result);
return 0;
}
형변환에서
자세히
학습합니다
.
...
result = x / y;
두개의 실수를 입력하시오: 7 4
printf("%f / %f = %f", x, y, result); 7.000000 + 4.000000 = 11.000000
7.000000 - 4.000000 = 3.000000
return 0; 7.000000 + 4.000000 = 28.000000
} 7.000000 / 4.000000 = 1.750000
int main(void)
{
70
input
1
minute
10
second
int input, minute, second;
10 - 20 - 10
-는 이항
연산자이기도
하고 단항
이항연산자 연산자이기도
단항연산자 하죠
-10 -x
10
x y
++x : 11
x++ : 10
--x : 9 10
10 +-- 11 =
== 11
9
x-- : 10
10
10
11
10
109
x
© 2012 생능출판사 All rights reserved
주의할 점
x = 1;
y = 1;
nextx = ++x; // x의 값이 증가된 후에 사용된다. nextx는 2가 된다.
nexty = y++;// y의 값이 사용된 후에 증가된다. nexty는 1이 된다.
printf("x=%d\n\n", x);
printf("y=%d\n", y);
printf("y++의 값=%d\n", y++); x=10
++x의 값=11
printf("y=%d\n", y);
x=11
y=10
y++의 값=10
return 0; y=11
}
변수(variable) = 수식(expression);
2 * 10 + 10 = 30
10
x y z
+ 1 = 11
10
x
모든 연산에는
결과값이 있고
대입 연산도
결과값이 있습니다.
덧셈연산의 결과값은 9
y = 10 + ( x = 2 + 7 );
대입연산의 결과값은 9
덧셈연산의 결과값은 19
y = x = 3
return 0; 수식 x+1의 값은 2
} 수식 y=x+1의 값은 2
수식 y=10+(x=2+7)의 값은 19
수식 y=x=3의 값은 3
복합 대입 연산자 의미
복합 대입 연산자란 +=처럼 x += y x=x+y
대입연산자 =와 산술연산자 x -= y x=x-y
를 합쳐 놓은 연산자 x *= y x=x*y
x /= y x=x/y
소스를 간결하게 만들 수 있 x %= y x=x%y
음 x &= y x=x&y
x |= y x=x|y
x ^= y x=x^y
x >>= y x = x >> y
x <<= y x = x << y
x += 1 // x = x + 1
x *= y + 1 // x = x * (y + 1)
x %= x + y // x = x % (x + y)
x
10
11 10
11
y
int main(void)
{ 10
11 10
20 33
2
int x = 10, y = 10, z = 33; x y z
x += 1; // x = x + 1;
y *= 2; // y = y * 2;
z %= x + y; // z = z % (x + y ); 주의!!
int main(void) 10
12
11
10
{
int x = 10;
x 수식 x++ 의 값: 10
현재 x의 값: 11
수식 ++x 의 값: 12
printf("수식 x++ 의 값: %d \n", x++); 현재 x의 값: 12
printf("현재 x의 값: %d \n", x); 수식 x-- 의 값: 12
printf("수식 ++x 의 값: %d \n", ++x); 현재 x의 값: 11
printf("현재 x의 값: %d \n", x); 수식 --x 의 값: 10
현재 x의 값: 10
printf("수식 x-- 의 값: %d \n", x--);
printf("현재 x의 값: %d \n", x);
printf("수식 --x 의 값: %d \n", --x);
printf("현재 x의 값: %d \n", x);
}
대입연산시 형변환
자동으로
수식연산시 형변환
형변환 변환되기도
하고 사용자가
바꾸어 주기도
명시적인 형변환 하죠
올림 변환
double f;
f = 10 + 20; // f에는 30.0이 저장된다.
내림 변환
int i;
i = 3.141592; // i에는 3이 저장된다.
10+20 = 30
30.0 3
3.141592
f i
© 2012 생능출판사 All rights reserved
올림 변환과 내림 변환
#include <stdio.h>
int main(void) 10000
16 11.23456
11 30
30.000000
{
char c;
c i f
int i;
float f;
c = 10000; // 내림 변환
i = 1.23456 + 10; // 내림 변환
f = 10 + 20; // 올림 변환
printf("c = %d, i = %d, f = %f \n", c, i, f);
return 0;
}
c:\...\convert1.c(10) : warning C4305: '=' : 'int'에서 'char'(으)로 잘립니다.
10 20 10 20
x y x y
char + short
int + int
30
z
© 2012 생능출판사 All rights reserved
수식에서의 자동적인 형변환
서로 다른 자료형이 혼합하여 사용되는 경우, 더 큰 자료형으로 통일
된다.
int형이 double형으로
승급된다.
10 1.2345
10.0 1.2345
전체수식의 결과값도
double형이 된다 .
11.2345
double
(자료형) 상수 또는 변수
(int) 1.23456
(double) x // double형으로 변환
(long) (x+y) // long형으로 변환
1.23456 1.23456
(int)
3. f = 5 / 4; 3
2
4.
5.
f = (double)5 / 4;
f = 5 / (double)4;
i
6. f = (double)5 / (double)4;
1.25
1.0
7.
8.
i = 1.3 + 1.8;
i = (int)1.3 + (int)1.8;
f
1. 정수형 변수 i 선언
2. 부동 소수점형 변수 f 선언
1 1 1 0
== ==
1 0
x3 y4
{
int x, y;
(x == y)
x와 y가 같으면 1, 다르면 0이 수식의 값이 된다.
실수는 약간의
오차가 있을 수
있죠!
마차 > 2대
&&
시종 > 10명
&&
…
x y x && y x || y
참 참 참 참
참 거짓 거짓 참
거짓 참 거짓 참
거짓 거짓 거짓 거짓
1 == 2 || 2 == 2
0 || 1
1
© 2012 생능출판사 All rights reserved
AND 연산자
27 800
(age <= 30) && (toeic >= 700)
참(1) 참(1)
참(1)
27 699
(age <= 30) || (toeic >= 700)
참(1) 거짓(0)
참(1)
int main(void)
{
int x, y;
괄호가 꼭
필요한
가요?
int main(void)
{
int year, result;
max_value = (x > y ) ? x : y;
printf("첫번째 수=");
scanf("%d", &x);
printf("두번째 수=");
scanf("%d", &y);
> 3
2 <
}
x2 3
y
© 2012 생능출판사 All rights reserved
콤마 연산자
어떤
콤마로 연결된 수식은 순차적으로 계산된다. 문장이던지
순차적으로
먼저 계산된다. 나중에 계산된다. 실행됩니다.
x++, y++ ;
21 2
3
x y
1 AND 0 = 0
0 AND 1 = 0
1 AND 1 = 1
1 OR 0 = 1
0 OR 1 = 1
1 OR 1 = 1
1 XOR 0 = 1
0 XOR 1 = 1
1 XOR 1 = 0
NOT 0 = 1
NOT 1 = 0
int main(void)
{
int x = 4; // 0100
return 0;
}
비트 << = 0x000008
비트 >> = 0x000002
(예) 순수한 빨강색: 0000 0000 1111 1111 0000 0000 0000 0000
RRRR RRRR
int main(void)
{
unsigned int color=0x00380000; // 픽셀의 색상
unsigned int result;
--
--
++
++
%%
//
**
--
++
5 % 3 ①
2 *
x = y = 5
①
% ②
10 3
x = 5
②
③
1
5
© 2012 생능출판사 All rights reserved
결합규칙의 예
y = a % b / c + d * (e - f);
② ①
③ ④
⑤
⑥
return 0;
}
printf("화씨온도를 입력하시오");
scanf("%lf", &f_temp);
c_temp = 5 / 9 * (f_temp - 32);
printf("섭씨온도는 %f입니다, c_temp);
화씨온도를 입력하시오: 90
return 0;
섭씨온도는 0.000000입니다.
}