▩ 연산자


1. 정수 연산자 원리
   정수/정수 = 정수
   정수/실수 = 실수
   실수/정수 = 실수
   실수/실수 = 실수

   - 작은 데이터 타입과 큰 데이터 타입의 경우 항상 작은 데이터 타입은 큰 데이터 타입으로 흡수

      된다.



>>>>> 기본 연산자


 #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);

   //특수문자의 출력은 2번 연속해서 입력합니다.
   printf("%d %% %d = %d\n", a, b, a%b); 
 }




2. 증가/감소 연산자
   - 일반 2항연산자보다 처리속도가 빠릅니다.

   - ++a, a++의 개념
     a = a + 1;


   - --a, a--의 개념
     a = a - 1;


   - a = ++b;
     b = b + 1;
     a = b;


   - a = b--;
     a = b;    
     b = b - 1;



>>>>> 증가 연산자


 #include <stdio.h>

 void main() {
   int a=30, b=30;

   printf("원래 a의 값 : %d\n", a);
   printf("원래 b의 값 : %d\n", b);
   printf("++a의 결과 : %d\n", ++a);
   printf("++연산 후의 값 : %d\n", a);
   printf("b++의 결과 : %d\n", b++);
   printf("++연산 후의 값 : %d\n", b);
 }




>>>>> 감소 연산자


 #include <stdio.h>

 void main() {
   int a=30, b=30;

   printf("원래 a의 값 : %d\n", a);
   printf("원래 b의 값 : %d\n", b);
   printf("--a의 결과 : %d\n", --a);
   printf("--연산 후의 값 : %d\n", a);
   printf("b--의 결과 : %d\n", b--);
   printf("--연산 후의 값 : %d\n", b);
 }




>>>>> 상수에 대한 연산은 에러를 발생시킨다.


#include <stdio.h>
#include <conio.h>

 void main() {
   int a=10;

   printf("++(10)=%d\n", ++(10));
   getch();
 }




>>>>> 권장이 되지 않는 예제


//팀원간 소스분석에 지연 시간이 발생합니다.
//개발후 유지보수에 많은 시간이 소모됩니다.
//소스는 간결하고 분석이 용이해야 합니다.

#include <stdio.h>
#include <conio.h>

 void main() {
   int a=10;
   int b=10;

   printf("(++a - ++a)+(++b)=%d\n", (++a - ++a)+(++b));
   getch();
 }




3. 할당 연산자
   - +=, -=, *=, /=
   - 연산 속도의 증가가 사용 목적
   - a += b;
     a = a + b;
 


>>>>> 할당 연산자


 #include <stdio.h>

 void main() {
   int a=10, b=3;

   printf("원래 a의 값 : %d\n", a);
   printf("%d + %d의 값 : %d\n", a, b, a+=b);
   printf("변경된 a 값 : %d\n",a);
   printf("%d - %d의 값 : %d\n", a, b, a-=b);
   printf("변경된 a 값 : %d\n",a);
   printf("%d * %d의 값 : %d\n", a, b, a*=b);
   printf("변경된 a 값 : %d\n", a);
   printf("%d / %d의 값 : %d\n", a, b, a/=b);
   printf("변경된 a 값 : %d\n", a);
 }




4. 관계 연산자(비교 연산자)
   <, <=, >, >=, ==, !=
   - 관계 연산자는 참인 경우는 0 이외의 값, 기본 값은 1, 거짓인 경우는 0의 값이 리턴된다.
   - bool 타입이 없습니다.
     . 참: 0 이외의 모든 값은 참입니다. 따라서 -100도 참 입니다.
     . 거짓: 0만 거짓입니다.

 #include <stdio.h>

 void main() {
   int a=10, b=15;

   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);
}




>>>>> 두개의 수를 입력받아 앞의 수가 크면 1, 그렇지 않으면 0을 출력하는 프로그램


 #include <stdio.h>

 void main() {
   int a, b;

   printf("첫번째 수를 입력하세요. : ");
   scanf("%d", &a);
   printf("두번째 수를 입력하세요. : ");
   scanf("%d", &b);
   printf("%d > %d의 결과는 %d입니다.\n", a, b, a>b);
 }




5. 논리 연산자
   !, &&, ||, &, |

>>>>>>>>>> 비트 and, or 연산자
#include <stdio.h>

main(){
 printf("10 | 3=%d\n", (10 | 3));
 printf("10 & 3=%d\n", (10 & 3));
}

/*
   0000 1010
  +0000 0011
  ----------
   0000 1011 --> 11


   0000 1010
  &0000 0011
  ----------
   0000 0010 --> 2
*/



>>>>>논리 연산자


 #include <stdio.h>

 void main() {
   int a=10, b=15, c=5, d=20;

   printf("%d>%d             => %d\n", a, b, a>b);
   printf("%d<%d             => %d\n", a, b, a<b);
   printf("%d<%d             => %d\n", c, d, c<d);
   printf("!(%d<%d)           => %d\n", c, d, !(c<d));
   printf("(%d>%d) && (%d<%d) => %d\n", a, b, c, d, (a>b)&&(c<d));
   printf("(%d>%d) || (%d<%d) => %d\n", a, b, c, d, (a>b)||(c<d));
   printf("(%d<%d) && (%d<%d) => %d\n", a, b, c, d, (a<b)&&(c<d));
   printf("(%d<%d) || (%d<%d) => %d\n", a, b, c, d, (a<b)||(c<d));
   printf("!(0)=> %d\n", !(0));
   printf("!(1)=> %d\n", !(1));
   printf("!(-100)=> %d\n", !(-100));
 }




 >>>>> 비트 연산자


#include <stdio.h>

 void main() {
   int a=0XD1, b=0XC4;

   printf("%X        => %d\n", a, a);
   printf("~%X       => %X\n", a, ~a);
   printf("%X        => %d\n", b, b);
   printf("~%X       => %X\n", b, ~b);
   printf("%X & %X => %X\n", a, b, a&b);
   printf("%X | %X => %X\n", a, b, a|b);
   printf("%X ^ %X => %X\n", a, b, a^b);
 }
 /*
  11010001
& 11000100
----------
  00010101 ==> 21 ==> 15
               10진수 16진수
 */




 >>>>> 이동연산자


- 왼쪽으로의 이동은 무조건 2배합니다.
- 오른쪽으로의 이동은 무조건 나누기2합니다.
- 2진수는 자리이동에따라 2배가 되던지, 그렇지 않으면 나누기 2배가 됩니다.

  0000 1000 ---> 8
  0001 0000 ---> 16
  0010 0000 ---> 32
 


  #include <stdio.h>

 void main() {
   int a=0XD1, b=0XC4;

   printf("원래의 값 : 10진수(%d), 16진수(%X)\n", a, a);
   printf("1번 왼쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", a << 1, a << 1);
   printf("2번 왼쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", a << 2, a << 2);
   printf("3번 왼쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", a << 3, a << 3);
   printf("4번 왼쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", a << 4, a << 4);
   printf("\n");
   printf("원래의 값 : 10진수(%d), 16진수(%X)\n", b, b);
   printf("1번 오른쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", b >> 1, b >> 1);
   printf("2번 오른쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", b >> 2, b >> 2);
   printf("3번 오른쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", b >> 3, b >> 3);
   printf("4번 오른쪽 이동한 값 : 10진수(%d), 16진수(%X)\n", b >> 4, b >> 4);
 }

 /*
 0  0  0  0  0  0  0  0
 ----------------------
 12864 32 16 8  4  2  1
 */

Posted by 나비:D
:
BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total :
Today : Yesterday :