내장형 하드웨어/C언어

C 언어의 연산자 - 산술, 비교, 논리 연산자

동화다아아 2011. 3. 31. 13:42
 

⇒ 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으로 반환하고 프로그램을 종료한다.

}