댄스댄스 2006. 8. 16. 13:51

* 연산자

- 데이터를 사용자가 원하는 형태로 가공하기 위해서 연산자를 사용한다
   C언어는 연산자를 다양하게 많이 지원한다

 

* 연산자의 종류

 

1. 산술연산자
    사칙연산 + - * / (몫연산자) %(나머지연산자)

int a=10, b=3;
printf("%d + %d = %d\n",a,b,(a+b));
printf("%d - %d = %d\n",a,b,(a-b));
printf("%d * %d = %d\n",a,b,(a*b));
printf("%d / %d = %d\n",a,b,(a/b));
printf("%d % %d = %d\n",a,b,(a%b));


2. 비교연산자 (관계연산자)
   < > <= >=
   결과값을 맞다 1, 틀리다 0 으로 반환해준다
   0 false
   1 true
   C언어는 0과 \0문자만 거짓이고 다 참값이다.


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

   == 서로같다   != 서로 같지 않다
   = 대입연산자

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


3. 논리연산자 (판단)

- 판단을 하면 맞다, 틀리다라는 형태로 되돌려 준다
- 판단을 해야하는 조건이 2개이상일때 판단을 한다
- 어떤 임의의 정수가 짝수이면서 5의 배수인지 확인

- 논리곱 연산자 && and, 그리고 연산자

- 논리합 연산자 || or, 또는 연산자

- 부정연산자 !  Not 연산자
  

printf("%d\n",((a<0) && (b<0)));
printf("%d\n",((a<0) || (b<0)));
printf("%d\n",(!((a<0) || (b<0)));

 

문) 변수 a가 가지고 있는 값이 짝수이면서, 5의 배수인지 확인

- 짝수란? 2로 나누어서 나머지가 0 인 값
- 5의 배수란? 5로 나누어서 나머지가 0인 값

printf("%d\n",(a%2==0)&&(a%5==0));


문) 변수 b가 2의 배수이거나, 3의 배수인지 확인
printf("%d\n",(b%2==0)||(b%3==0));


* 연산자의 우선순위
   () -> 산술 -> 비교 -> 논리 -> 대입


--------------------------

* shift 연산자 (이동)

   - bit 단위로 연산
   - left shift   <<
      대상값*2^n (n은 이동 bit수)

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

   - right shift  >>
      대상값/2^n

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


----------------------
*2진수(0~1), 8진수(0~7), 10진수(0~9), 16진수(0~9,ABCDEF)

printf("%d %o %x\n",10,10,10);

printf("%d %d %d\n",10,010,0x10);


-----------------------
* 비트연산자

<<  >>  ~ (1의 보수연산자)
& (비트곱)
| (비트합)

printf("%d\n",~9);


----------------------
1. 단항연산자
printf("%d %d\n",a*-1, -a);

2. 이항연산자


3. 삼항연산자
(조건) ? 참 : 거짓

문) 변수 a가 가지고 있는 값이 음수인지, 양수인지 확인

- 음수란 ? 0보다 작은값
- 양수란 ? 0보다 큰값   

(a<0) ? printf("음수") : printf("양수");


문) 변수 a, b중에서 큰수를 출력
(a<b) ? printf("%d",b) : printf("%d",a);


문) 세개의 정수중에서 제일 큰 수 출력

int p=5, q=6, r=8;
int max;

//(p<q) ? max=q : max=p;
max=(p<q) ? q : p;


//(max<r) ? max=r : max=max;
max=(max<r) ? r : max;

printf("max=%d\n",max);

------------------------------

* 1증가 연산자

int idx=5;
printf("idx=%d\n",idx);//5

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

idx+=1;
printf("idx=%d\n",idx);//7

idx++;
printf("idx=%d\n",idx);//8

++idx;
printf("idx=%d\n",idx);//9


* 1감소 연산자

int num=5;

num=num-1;
printf("num=%d\n",num);

num-=1;
printf("num=%d\n",num);

num--;
printf("num=%d\n",num);

--num;
printf("num=%d\n",num);


----------------------------

* 대입연산자

int su=10;

su=su+5;
printf("su=%d\n",su); //15

su+=5;
printf("su=%d\n",su); //20

su*=5; //su=su*5
printf("su=%d\n",su); //100

su/=5; //su=su/5
printf("su=%d\n",su); //20

su%=5; //su=su%5
printf("su=%d\n",su); //0

 

 

----------------------------------------

 

#include <stdio.h>
void main(){

int a=10, b=3;
/*
printf("%d + %d = %d\n",a,b,(a+b));
printf("%d - %d = %d\n",a,b,(a-b));
printf("%d * %d = %d\n",a,b,(a*b));
printf("%d / %d = %d\n",a,b,(a/b));
printf("%d %% %d = %d\n",a,b,(a%b));

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

/*
printf("%d < %d = %d\n",a,b,(a<b));
printf("%d > %d = %d\n",a,b,(a>b));
printf("%d <= %d = %d\n",a,b,(a<=b));
printf("%d >= %d = %d\n",a,b,(a>=b));

printf("%d == %d : %d\n",a,b,(a==b));
printf("%d != %d : %d\n",a,b,(a!=b));
*/
/*
printf("%d\n",((a<0) && (b<0)));
printf("%d\n",((a<0) || (b<0)));
printf("%d\n",(!((a<0) || (b<0)));
*/

/*
printf("%d\n",((a%2==0)&&(a%5==0)));
printf("%d\n",(b%2==0)||(b%3==0));

*/

/*
printf("%d << %d = %d\n",a,b,(a<<b));
printf("%d >> %d = %d\n",a,b,(a>>b));


printf("%d %o %x\n",10,10,10);

printf("%d %d %d\n",10,010,0x10);

printf("%d\n",~9);

*/

/*
printf("%d %d\n",a*-1, -a);

(a<0) ? printf("음수") : printf("양수");

(a<b) ? printf("%d",b) : printf("%d",a);

  */

/*
int p=5, q=6, r=8;
int max;

//(p<q) ? max=q : max=p;
max=(p<q) ? q : p;


//(max<r) ? max=r : max=max;
max=(max<r) ? r : max;

printf("max=%d\n",max);

*/


int idx=5;
printf("idx=%d\n",idx);//5

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

idx+=1;
printf("idx=%d\n",idx);//7

idx++;
printf("idx=%d\n",idx);//8

++idx;
printf("idx=%d\n",idx);//9

 

int num=5;

num=num-1;
printf("num=%d\n",num);

num-=1;
printf("num=%d\n",num);

num--;
printf("num=%d\n",num);

--num;
printf("num=%d\n",num);

 

int su=10;

su=su+5;
printf("su=%d\n",su); //15

su+=5;
printf("su=%d\n",su); //20

su*=5; //su=su*5
printf("su=%d\n",su); //100

su/=5; //su=su/5
printf("su=%d\n",su); //20

su%=5; //su=su%5
printf("su=%d\n",su); //0


}

 

 

* 1 증감연산자
- 단독으로 쓰이면 연산자가 변수명 앞에 있든, 위에 있든 상관이 없다
- 단, 1증감연산자가 대입연산자와 함께 사용될때는
   앞에 있는 경우와 뒤에 오는 경우를 정확히 구분해서 사용할 것
   ++idx 먼저 1증가
   idx++ 나중에 1증가


int a=10,b=20,c,d;

/*
c=++a; //a=a+1 -> c=a
d=b--; //d=b -> b=b-1

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

각각의 변수에 어떤 값이 있는지 확인?

a=11
b=19
c=11
d=20
*/

int z;
z=++a * b--; //a=a+1 -> z=a*b -> b=b-1
                   //a=11       z=11*20   b=19
printf("%d\n",z);

-------------------------


문) 각각의 지폐의 갯수를 확인

int money=52430;

int m,c,b,s;

m=money/10000;         //m=52430/10000
money=money%10000; //money=2430
c=money/1000;           //c=2430/1000
money=money%1000;  //money=430
b=money/100;
money=money%100;
s=money/10;

printf("만원 %d장\n",m);
printf("천원 %d장\n",c);
printf("백원 %d장\n",b);
printf("십원 %d장\n",s);

----------------------------
문) 1년 365.2422 일
     365일 ?시간 ?분 ?초
     1분 60초
     1시간 60초*60분=3600초
     1일 24시간*3600초=86400초
     1년 86400초*365.2422

int days=365.2422;
days=365.2422*86400; //1년이 ?초

int d,h,m,s;
d=days/84600; //365

days=days%86400;
h=days/3600;

days=days%3600;
m=days/60;
s=days%60;

printf("%d일 %d시간 %d분 %d초\n",d,h,m,s);

 

* 형변환

1. 자동형변환
   - 자료형의 크기가 큰거 따라감
   - 정수형/실수형 -> 결과가 실수형임

2. 강제형변환 (cast연산자)
  - 사용자의 필요에 의해 자료형을 변환한다. 일시적으로 사용된다
  - (자료형)값
  - (int)3.4

printf("%d\n",(int)(3.6+3.6));     //7
printf("%d\n",(int)3.4+(int)3.4); //6


-------------------------
* unsigned int : 음수값을 대입하면 쓰레기값이 들어간다
* unsigned long
* 반드시 양수값만 존재하는 값을 표현할때 사용하면 된다
   예)달력

- 임의의 정수값을 %3으로 나누면 나올수 있는 나머지의 종류 0 1 2
- 임의의 정수값을 %5으로 나누면 나올수 있는 나머지의 종류 0 1 2 3 4
- 임의의 정수값을 %45으로 나누면 나올수 있는 나머지의 종류
   0, 1, 2,....43, 44

--------------------------