C 언어의 연산자 - 산술, 비교, 논리 연산자
⇒ sizeof() - 연산자이다.
⇒ 단항 연산자, 다항 연산자
ex) 1-4에서 (-)기호는 다항 연산자로 연산(뺄셈)의 의미이며,
-5에서 (-)기호는 단항 연산자로 부호(음수)의 의미.
- 연산자 표
분류 |
연산자 |
연산순서 |
우선순위 |
괄호 및 포인트 연산자 |
() [] -> |
좌→우 |
높음 |
단항 연산자 |
! ~ ++ -- +(단항) -(단항) *&(type) sizeof |
우→좌 |
↑ |
산술 승제 연산자 |
*(곱셈) / % |
좌→우 |
| |
산술 가감 연산자 |
+ - |
좌→우 |
| |
비트 쉬프트 연산자 |
<< >> |
좌→우 |
| |
비교 연산자 |
< <= > >= == != |
좌→우 |
| |
비트 논리 연산자 |
&(비트AND) ^ | |
좌→우 |
| |
논리 연산자 |
&& || |
좌→우 |
| |
조건 연산자 |
? : |
우→좌 |
| |
부가 연산자 |
= += -= *= /= %= ^= |= <<= >>= |
우→좌 |
↓ |
순서 연산자 |
, |
좌→우 |
낮음 |
※ CPU는 정수 연산에 최적화 되어 있다.
⇒ 그러므로 5/3의 계산을 하면 1(몫)이 나오며, 소수점 이하는 계산하지 않는다.
5%3의 계산을 하면 2(나머지), 역시 정수기반의 계산으로 소수점 이하는 계산하지 않는다.
//실수를 정수형에 넣었을 때의 결과.
#include<stdio.h>
int main()
{
int A=4.9;
int B=4.1;
int C=12.89486486;
printf("%d\n",A); //A는 int형이므로 소수점은 버리고 4의 값을 갖는다.
printf("%d\n",B); //B는 int형이므로 소수점은 버리고 4의 값을 갖는다.
printf("%d\n",C); //C는 int형이므로 소수점은 버리고 12의 값을 갖는다.
return 0;
}
- 형 변환 (type cast)
- 형 동등: 대입연산자에서 형은 동등함을 기준으로 하고 있다.
int A=4;
float B=4.3;
int C=A+B; // 4.0 + 4.3 =8.3이 되지만 → int 형이 되면서 8이 저장된다.
※ 컴파일러는 CPU가 덧셈이 가장 빠르기 때문에 3*6 같은 경우 3을 6번 더하는 것으로 바꿔버린다. 이것이 곱셈을 수행하는 것 보다 CPU의 입장에서는 훨씬 빠르다.
※ CPU는 정수는 반올림 하지 않지만, 소수는 반올림을 한다. 그 이유는 정수는 속도를 우선시하기 위해 최적화 되어 있지만, 실수의 경우에는 정밀한 계산이 필요하기 때문이다.
//실수와 정수간의 형변환 확인
#include<stdio.h>
int main()
{
float A=7;
float B=3;
float C=7/3; // float을 선언했지만 7과 3으로 값을 주어 이것은 정수형 값이 되어 나누기 결과가 2가 되어 버린다. 그래서 결과가 2를 소수점 이하로 표시해서 2.000000 값이 나온다.
float D=7/3.0; // 3.0 이 실수 입력되어 나머지 수(7)까지 실수형으로 바뀐다.
float E=7.0/3.0;
float G=5/3.0;
printf("%f\n",A/B); // 결과 값 2.333333
printf("%f\n",C); // 결과 값 2.000000
printf("%f\n",D); // 결과 값 2.333333
printf("%f\n",E); // 결과 값 2.333333
printf("%f\n",G); // 결과 값 1.666667
return 0;
}
- 비교 연산자
연산자 |
의미 |
수식 예 |
수식의 의미 |
< |
보다 작다 |
a < b |
a가 b보다 작으면 참이다. |
> |
보다 크다 |
a > b |
a가 b보다 크면 참이다. |
<= |
작거나 같다 |
a <= b |
a가 b보다 작거나 같으면 참이다. |
>= |
크거나 같다 |
a >= b |
a가 b보다 크거나 같으면 참이다. |
== |
같다 |
a == b |
a와 b가 같으면 참이다. |
!= |
같지 않다 |
a != b |
a와 b가 같지 않으면 참이다. |
⇒ 참이면 1, 거짓이면 0으로 인식된다. 그리고 논리 값 1과 0도
#include <stdio.h>
int main()
{
printf("%d\n",5<6); // 참이므로 1 출력
printf("%d\n",5>6); // 거짓이므로 0 출력
printf("%d\n",5>=6); // 거짓이므로 0 출력
printf("%d\n",5<=6); // 참이므로 1 출력
printf("%d\n",5==6); // 거짓이므로 0 출력
printf("%d\n",5!=6); // 참이므로 1 출력
return 0;
}
- 논리 연산자
연산자 |
의미 |
수식 예 |
수식의 의미 |
&& |
논리 AND |
a && b |
a와 b가 모두 참이면 참이 된다. |
|| |
논리 OR |
a||b |
a와 b 중에서 적어도 한쪽이 참이면 참이 된다. |
! |
NOT |
!a |
a가 참이면 거짓이 되고, a가 거짓이면 참이 된다. |
※ 0 이외의 모든 수는 참(1)이다.
※ ! -100은 거짓(0)
#include<stdio.h>
int main()
{
int A; /* A를 int 형으로 선언, 메모리에 A라는 이름을 가진 int형 4byte 공간이 생긴다. 이때, 4byte 공간은 임의의 쓰레기 값이 채워져 있다.*/
A=0; // A를 0으로 선언, 메모리의 A의 공간에 쓰레기 값 대신 0이 들어간다.
scanf("%d", &A); /* 10진수 정수형으로 입력받은 수가 A의 주소 값에 들어간다. 즉, 메모리의 A의 공간에 입력받은 수가 0 대신 들어간다.*/
++A; /* 메모리에 저장된 A값을 불러와 1을 더하고 더해진 값은 다시 메모리로 들어간다. */
printf("%d\n",A); // 메모리 A에 있는 값을 10진수 정수형으로 출력한다.
A++; /* 메모리에 저장된 A값을 불러와 1을 더하고 더한 값이 다시 메모리로 들어간다. */
printf("%d\n",A); // 메모리 A에 있는 값을 10진수 정수형으로 출력한다.
return 0; // 함수를 0으로 반환하고 프로그램을 종료한다.
}
'내장형 하드웨어 > C언어' 카테고리의 다른 글
if문, 다중 if문, switch 문, 흐름도 (flow chart) (0) | 2011.04.04 |
---|---|
부가 연산자, 복합 부가 연산자, printf, scanf, 제어문 (0) | 2011.04.01 |
문자, 문자열, ASCII code (확장 아스키) (0) | 2011.03.30 |
C언어 다섯번째 정리 - 실수형 저장 과정(IEEE754) 확인, 제로확장, 부호확장 (1) | 2011.03.29 |
실수형 저장 과정(IEEE754) 확인, 제로확장, 부호확장, 마인드스톰(Sound sensor, Touch sensor, ultrasonic sensor) (0) | 2011.03.29 |