딩굴댕굴

C 5Day (20160113)

by jennysgap

BOX

산술연산자 예제(계산기) 문제점

  • 내가 쓰고 싶은 연산(+ 등...)을 계산기처럼 설정해서 쓸 수 없다 : 스위치
  • 연산 후 바로 프로그램이 종료된다 : 반복론
  • 복합적으로 연산이 안된다 : 동적할당 (가변적인 길이로 입력)
  • 등...



관계연산자
두 개의 피 연산자 간의 대소관계를 비교하기 위하여 사용
0은 거짓, 0이외의 모든 수는 참을 의미

!= 순서주의 (나중에 컴파일러하면 오류로 걸러내지 못함. 하나하나 보면서 내가 찾아야 함)





관계연산자 예제
#include <stdio.h>
int main(void)
{
float su1=3.01, su2=3;
printf("변수 su1과 su2의 크기 비교 결과 : %d\n", su<=su2);
printf("변수 su1과 su2의 크기 비교 결과 : %d\n", su>=su2);
printf("변수 su1과 su2의 크기 비교 결과 : %d\n", su==su2);
printf("변수 su1과 su2의 크기 비교 결과 : %d\n", su!=su2);
return 0;
}




대입연산자
정의 : 우측에 수행한 결과를 좌측에 지정된 변수로 대입
복합대입연산자 : 대입연산자를 다른 연산자와 결합하여 사용





대입연산자 예제

#include <stdio.h>

int main(void)

{

int su1, su2

su1=su2=5                            //오른쪽에서 왼쪽으로 대입

printf("su1 + 1 = %d\n", su1+=1);                //su1=su1+1     su1=6

printf("su1 - 1 = %d\n", su1-=1);                //su1=su1-1     su1=5

printf("su1 * su2 = %d\n", su1*=su2);                //su1=su1*su2     su1=25

printf("su1 / su2 = %d\n", su1/=su2);                //su1=su1/su2     su1=5

printf("su1 %% su2 = %d\n", su1%=su2);                //su1=su1%su2     나머지값=0

return 0;

}





논리연산자
참과 거짓을 판별하는 연산 (or, and, not)






논리연산자 예제
#include <stdio.h>
int main(void)
{
int num1=10;
int num2=20;
int result1, result2, result3;

result1=(num1==10&&num2==12);                //num1=1'참'   num2=0'거짓'   0'거짓'
result2=(num1<10||num2>12);                        //num1=0    num2=1    1
result3=(!num1);                                        //num1=1                    0

printf("result1 : %d\n", result1);
printf("result2 : %d\n", result2);
printf("result3 : %d\n", result3);
return 0;
}





증감연산자
피연산자를 1씩 증가 혹은 감소하는 기능

전치와 후치에 따른 연산자 비교

전치 :   ++a로 표기하며 a=a+1을 먼저 처리한다.

후치 :   a++로 표기하며 a의 데이터를 사용한 후 a=a+1을 처리한다.





증감연산자 예제

#include <stdio.h>

int main(void)

{

int num1=12;

int num2=12;


printf("num1 : %d\n", num1);

printf("num1++ : %d\n", num1++);

printf("num1 : %d\n\n", num1);


printf("num2 : %d\n", num2);

printf("++num2 : %d\n", ++num2);

printf("num2 : %d\n\n", num2);

return 0;

}


#include <stdio.h>

int main(void)

{

int num1=10;

int num2=(num1--)+2;


printf("num1 : %d\n", num1);

printf("num2 : %d\n", num2);

return 0;

}



만약 증감연산자 예제 보고도 이해가 조금 안된다 싶으면 아래 문제 풀어보기

#includ <stdio.h>

int main(void)

{

int a=5, b-6, c=10, d;

d=++a*b--;

printf("a=%d, b=%d, d=%d\n", a, b, d);


d=a++ + ++c-b--;

printf("a=%d, b=%d, c=%d, d=%d", a, b, c, d);


a=1;

b=0;

d=a++ || ++b*d-- / ++c;

printf("a=%d, b=%d, c=%d, d=%d", a, b, c, d);


d=b++ && ++a / ++c*d++;

printf("a=%d, b=%d, c=%d, d=%d", a, b, c, d);

return 0;

}





비트연산자
10진수를 2진수로 변환하여 각 비트별로 논리/이동 연산을 한다.







비트연산자 예제

#include <stdio.h>

int main(void)

{

int num1=12;

int num2=7;

int result=num1|num2;                // 15


printf("num1과 num2의 논리합 : %d\n", result);

return 0;

}

비트라는 것은 '2진수로 계산하라'는 의미

비트연산자를 AND로도 해보고 XOR로도 해보기




#include <stdio.h>

int main(void)

{

int su1=15;

su1=~su1;


printf("su1의 비트 부정 : %d\n:, su1);

return 0;

}





2의 보수 구하는 방법 Tip






Shift연산자 예제

#include <stdio.h>

int main(void)

{

int op=30, result;

result=op<<1;

printf("30을 좌측으로 1비트 이동시킨 결과 = %d\n", result);

return 0;

}

<<1    0000 0000        0000 0000        0000 0000        0001 1110

0000 0000        0000 0000        0000 0000        0011 1100


#include <stdio.h>

int main(void)

{

int op=30, result;

result=op>>1;

printf("30을 우측으로 1비트 이동시킨 결과 = %d\n", result);

return 0;

}

>>1    0000 0000        0000 0000        0000 0000        0001 1110

0000 0000        0000 0000        0000 0000        0000 1111


분석
좌측으로 1비트 갈 때마다 곱하기 2의 효과
우측으로 1비트 갈 때마다 나누기 2의 효과










반응형

'BOX' 카테고리의 다른 글

C 7Day (20160115)  (0) 2016.01.21
C 6Day (20160114)  (0) 2016.01.20
C 4Day (20160112)  (0) 2016.01.20
C 3Day (20160111)  (0) 2016.01.20
C 2Day (20160108)  (0) 2016.01.20

블로그의 정보

jennysgap

jennysgap

활동하기