변수가 나타낼 수 있는 범위를 넘는 숫자를 저장하려고 할 때 발생하는 것
#include <stdio.h>
int main()
{
char num1 = 128;
unsigend char num2 = 256;
printf("%d %u\n", num1, num2); // -128, 0 출력됨
return 0;
}
위 코드와 같이 num1을 출력하면 128이 출력되어야 하지만 char에 저장할 수 있는 범위는
-128 ~ 127이라서 오버플로가 발생했습니다.
즉 저장할수 있는 범위를 넘어섰고 다시 최솟값인 -128부터 시작된다.
증감 연산자 | 차이점 |
---|---|
A=A+1 와 A++ | A++가 좀더 타이핑 하기 편하다는 차이점만 있습니다. |
++A 와 A++ | ++A는 증가된값을 저장하는것이고 A++는 증가되기 전 값이 저장 |
-A 와 A- | -A는 음수를 표현하는 수지만 A-라는 문장은없다. |
A++ 와 A ++ | A앞에 공백이 있으면 안되므로 A++가 맞는답이다. |
(X = 9, Y = 4) 일 경우 결과 표시
복합 대입 연산식 | 연산 결과 | 연산식의 의미 |
---|---|---|
X += Y | X = 13 | X = X + Y |
X -= Y | X = 5 | X = X – Y |
X *= Y | X = 36 | X = X * Y |
X /= Y | X = 2 | X = X / Y |
X %= Y | X = 1 | X = X % Y |
X &= Y | X = 0 | X = X & Y |
X |= Y | X = 13 | X = X | Y |
X ^= Y | X = 13 | X = X ^ Y |
X >>= Y | X = 0 | X = X >> Y |
X <<= Y | X = 144 | X = X << Y |
관계 연산자 | 연산식의 의미 | 관계 연산자 | 연산식의 의미 |
---|---|---|---|
X = Y | X에 Y의 값을 대입한다 | X < Y | X가 Y보다 작은가? |
X == Y | X와 Y가 같은가? | X >= Y | X가 Y보다 크거나 같은가? |
X != Y | X와 Y가 다른가? | X <= Y | X가 Y보다 작거나 같은가? |
X > Y | X가 Y보다 큰가? | X <> Y | 잘못된 식 |
#include <stdio.h>
int main(void)
{
int x, y;
printf("두개의 정수를 입력하시오: ");
scanf("%d%d", &x, &y);
printf("%d && %d의 결과값: %d\n", x, y, x && y);
printf("%d || %d의 결과값: %d\n", x, y, x || y);
printf("!%d의 결과값: %d\n", x, !x);
return 0;
}
정수를 x와 y를 각각 1 0을 입력했을 때 출력 결과
비트 연산자 | 연산식의 의미 | 연산 결과 |
---|---|---|
X & Y | 비트 AND | 1 |
X | Y | 비트 OR | 13 |
X ^ Y | 비트 XOR | 12 |
X << Y | 왼쪽으로 이동 | 288 |
X >> Y | 오른쪽으로 이동 | 0 |
~ X | 비트 NOT | -10 |
위의 연산 결과는 (X=9, Y=5) 일 경우의 결과입니다.
ex) 암묵적 형변환 : 상황에 따라서 자동적으로 이루어지는 형변환
#include <stdio.h>
int main(void)
{
double a;
a = 10;
int b = 10;
b = 10.123456;
return 0;
}
위 코드의 경우 a는 10이 아닌 10.0이 저장되게 된다.
반대로 b는 10.123456이 아닌 10이 저장되게 된다.
ex) 명시적 형변환 : 변수의 타입을 강제적으로 프로그래머가 변환하는 방법
#include <stdio.h>
int main(void)
{
int i;
double f;
f = 5 / 4; // 1.0
f = (double)5 / 4; // 5.0 / 4 = 1.25
f = 5 / (double)4; // 5 / 4.0 = 1.25
f = (double)5 / (double)4; // 5.0 / 4.0 = 1.25
i = 1.3 + 1.8; // 3.1 -> 소수점 제거 -> 3
i = (int)1.3 + (int)1.8; // (1.3 -> 1) + (1.8 -> 1 ) = 2
}