Programming/C C++
1. 산술연산자

 연산자  역활
 +  더하기
 -  빼기
 *  곱하기
 /  나누기
 %  나머지

#include <stdio.h>

main()
{
  int i;
  int j;
 
  i = 3;
  j = 2;
 
  printf("%d\n", i + j);
  printf("%d\n", i - j);
  printf("%d\n", i * j);
  printf("%d\n", i / j);
  printf("%d\n", i % j);
}



2. 관계연산자

 연산자  역활
 <  작다.
 >  크다.
 ==  같다.
 <=  작거나 같다.
 >=  크거나 같다.
 !=  같지않다.

#include <stdio.h>

main()
{
  int i;
  int j;
 
  i = 3;
  j = 2;
 
  if (i < j)
    printf("i가 j보다 작다.\n");
  
  if (i > j)
    printf("i가 j보다 크다.\n");
   
  if (i == j)
    printf("i와 j가 같다.\n");
   
  if (i != j)
    printf("i와 j가 같지않다.\n");
}



3. 관계연산자의 또다른 정의 방법

관계연산자를 통해 다음과 같은 구문이 작성하였습니다.

#include <stdio.h>

main()
{
  int i = 2;
  int j = 1;
  int t;
 
  if (i < j)
    t = i + j;
  else
    t = i - j;
   
  printf("결과 : %d\n", t);
}


위 program은 i가 j보다 작으면 i와 j를 더하여 t에 저장하고 i가 j보다 작지 않으면 i에서 j를 뺀 후 그 결과를 t에 저장하도록 하고 있습니다. 만일 위와 같은 조건식이 복잡하다고 생각되면 다음과 같이 작성하는 것도 가능합니다.

#include <stdio.h>

main()
{
  int i = 2;
  int j = 1;
  int t;
 
  t = (i < j) ? i + j : i - j;
   
  printf("결과 : %d\n", t);
}


'조건 ? 참일경우의 처리 : 거짓일 경우의 처리;' 의 형식으로 작성하면 위와 같은 조건식을 조금이나마 더 간단하게 표현할 수 있게 됩니다.

4. 논리연산자

 연산자  역활
 !  부정
 &&  그리고(and)
 ||  또는(or)

#include <stdio.h>

main()
{
  int i = 10;
  int j = 20;
 
  int a = 15;
  int b = 20;
 
  if ((i < j) && (a < b))
    printf("i가 j보다 작고 a가 b보다 작다.\n");
   
  if ((i < j) || (a > b))
    printf("i가 j보다 작거나 a가 b보다 크다.\n");
   
  if (!(i == a))
    printf("i가 a와 같지 않다.(i != a)와 같다.\n");
}



5. 대입연산자

 연산자  역활
 =  우변값을 좌변에 대입
 +=  좌변값과 우변값을 더한 후 좌변에 대입
 -=  좌변값에 우변값을 뺀 후 좌변에 대입
 *=  좌변값과 우변값을 곱한 후 좌변에 대입
 /=  좌변값과 우변값을 나눈 후 좌변에 대입
 %=  좌변값과 우변값을 나누고 그 나머지를 자변에 대입
 >>=  좌변값을 우변값만큼 오른쪽 shift연산 후 좌변에 대입
 <<=  좌변값을 우변값만큼 왼족 shift연산 후 좌변에 대입
 &=  좌변값과 우변값을 and연산 후 좌변에 대입
 |=  좌변값과 우변값을 or연산 후 좌변에 대입
 ^=  좌변값과 우변값을 xor연산 후 좌변에 대입

#include <stdio.h>

main()
{
  int i = 10;
  int j = 20;
 
  i = j;
  printf("j값을 i변수에 대입 %d\n", i);
 
  i += j;
  printf("i와 j를 더하고 그 결과를 i에 대입 %d\n", i);
 
  i -= j;
  printf("i에 j값을 감산한 후 그 결과를 i에 대입 %d\n", i);
 
  i *= j;
  printf("i와 j를 곱하고 그 결과를 i에 대입 %d\n", i);
 
  i /= j;
  printf("i와 j를 나누고 그 결과를 i에 대입(정수결과값 반환) %d\n", i);
 
  i = 10;
  j = 3;
 
  i %= j;
  printf("i와 j에 대한 나머지 결과를 i에 대입 %d\n", i);
 
  i = 5;
  j = 1;
 
  i >>= j;
  printf("i값을 j만큼 오른쪽 shift한 후 i에 대입 %d\n", i);
 
  i <<= j;
  printf("i값을 j만큼 왼쪽 shift한 후 i에 대입 %d\n", i);
 
  i = 3;
  j = 2;
 
  i &= j;
  printf("i값과 j값을 and연산(bit 기준) %d\n", i);
 
  i = 2;
  j = 3;
 
  i |= j;
  printf("i값과 j값을 or연산(bit 기준) %d\n", i);
 
  i = 2;
  j = 4;
 
  i ^= j;
  printf("i값과 j값을 xor연산(bit 기준) %d\n", i);
}



6. Shift연산

인간의 입장에서 가장 많이 쓰이는 숫자는 10진수입니다. 그에 반해 Computer는 0과 1만으로 이루어진 2진수를 씁니다. 0과 1만으로 Data를 처리하기가 가장 간단하기 때문에 그 만큼 단순화할 수 있기 때문입니다. 2진수를 10진수로 이해하기 위한 방법중의 하나로 2진수 각 자리를 2의 승수로 계산하는 방법이 있습니다. 예를 들어

10

이라는 2진수가 있으면 각 자리를 오른쪽 부터 20, 21순으로 계산하여 2 * 0, 2 * 1 을 하게되면 2 * 1에만 1이 있으므로 10진수로 2가 되는 것입니다.

Shift연산이라는 것은 이 2진수로 나열된 숫자를 밀어버리거나 당겨놓는 것을 의미하는 것으로 C언어를 통해

5 >>= 1

이라고 하면 '5를 2진수화 한 기준에서 1만큼 오른쪽으로 민다.'라는 의미가 됩니다. 따라서 5를 2진수로 분해하면

101

이 되고 이 상태에서 오른쪽으로 1만큼 밀면 결과는

10

이 됩니다.

마지막으로 이 10이라는 2진수를 10진수로 바꾸면 다음과 같은 결과가 생기게 됩니다.(왼쪽 Shift연산을 하면 0이 채워지게 됩니다.)

2

Shift연산자는 필요하다면 몇개든 사용할 수 있습니다.

5 >> 4 << 3 >> 2

7. and, or, xor연산

and연산은 연산하고자 하는 피연산자의 bit가 1일때만 1이 되는 연산입니다. 참고로 and와 or, xor연산도 Shift연산처럼 2진수를 기준으로 연산합니다.

10진수 3을 2진수로 -> 11
10진수 2를 2진수로 -> 10

11과 10을 and연산하면 1이 있는 것만 1이되므로 결과는 10(10진수 2)이 됩니다.

and는 피연산자가 모두 1이여야만 결과가 1이지만 or연산자는 둘줄 하나만 1이여도 결과가 1이 됩니다.

10진수 2를 2진수로 -> 10
10진수 3을 2진수로 -> 11

10과 11을 or연산하면 둘중 하나만 1이 있어도 1이되므로 결과는 11(10진수 3)이 됩니다.

and와 or는 피연산값이 1인가 0인가에 따라 결과가 달라지지만 xor는 피연산자값이 같은가 틀린가에 따라 결과가 달라집니다.

10진수 2를 2진수로 ->  10
10진수 4를 2진수로 -> 100

10과 100을 xor연산하면 처음 두자리 까지는 상호 값이 다르므로 1이고(비어있는 부분은 자동으로 0이 됩니다.) 마지막 한자리는 둘다 값이 0이므로 연산값은 0이 됩니다. 따라서 결과는 110 (10진수 6)이 됩니다.

참고 :
산술연산자와 Shift연산자, and/or/xor연산자는 모두 뒤에 =기호가 붙어있어서 대입관련 연산자가 되지만 =기호만 빼면 각각의 역활을 별도로 수행하는 연산기호가 됩니다.(and, or, xor연산자는 모두합쳐 bit연산자라고도 합니다.)

8. sizeof 연산자

sizeof는 특정 Data형의 크기값을 반환하는 연산자중의 하나입니다.

#include <stdio.h>

main()
{
  int i;
 
  printf("int형 크기 : %d\n", sizeof(i));
}



9. cast 연산자

특정 Data형을 다른 Data형으로 변환하기 위한 연산자입니다.

#include <stdio.h>

main()
{
  int i = 10;
  
  printf("%f\n", (float)i);
}


(float)i 를 통하여 int형 변수 i를 float형으로 변환하여 출력합니다.


참고 :
Data형이 작은 것과 Data형이 큰것끼리 큰 Data형을 기준으로 연산하게 되면 자동 형변환되어 연산됩니다.

#include <stdio.h>

main()
{
  char c = 10;
  int i = 1000;
 
  printf("%d\n", c + i);
}



10. 증/가감 연산자

 연산자  역활
 ++  1더한다.
 --  1뺀다.

증/가감 연산자는 피연산자의 값을 1증가하거나 1감소시키는 역활을 합니다.

#include <stdio.h>

main()
{
  int i = 1;
 
  ++i;
 
  printf("%d\n", i);
}



하지만 ++나 --연산자가 다른 연산자와 함께 연산되는 경우 증/가감연산자가 앞에 있으면 선증가/선감소 되고 뒤에 있으면 후증가/후감소되어 약간씩 다른 결과를 나타낼 수도 있습니다.

예를 들어

int i = 100;
int j;
j = ++i - 50;

라고 하면 ++연산자가 앞에 있으므로 먼저 i값을 1증가 시킨 후 - 50을 계산하게 됩니다. 반면

int i = 100;
int j;
j = i++ - 50;

위와 같이 ++가 피연산자의 뒤에 위치하게 되면 먼저 - 50을 계산한 후에 i값을 1증가시키게 됩니다.

#include <stdio.h>

main()
{
  int i = 100;
  int j;
 
  j = ++i - 50;
  printf("%d\n", i);
  printf("%d\n", j);
 
  i = 100;
 
  j = i++ - 50;
 
  printf("%d\n", i);
  printf("%d\n", j);
}



11. bit 연산자

 연산자  역활
 &  and 연산
 |  or 연산
 ^  xor 연산
 ~  반전

bit연산자는 피연산자의 bit부호를 가지고 연산을 수행하는 연산자 입니다.

#include <stdio.h>

main()
{
 char i = 5;
 char j = 4;
 i = i & j;
 printf("%d\n", i);
}


i의 값과 j의 값을 &(and) 연산합니다.

먼저 &(and)연산은 두 bit가 1이되야만 결과가 1이 되는 연산입니다. i의 5와 j의 4라는 값을 bit로 분해해 보면 다음과 같이 되며(Char 형은 8bit크기(128)의 Data형입니다.)

i 값 5 => 00000101
j 값 4 => 00000100

bit값 중에서 같은 위치에 둘다 1인것은 뒤에서 세번째 bit밖에 없으므로 and연산의 결과는

00000100 => 정수값 4

가 되는 것입니다.


#include <stdio.h>

main()
{
 char i = 5;
 char j = 4;
 i = i | j;
 printf("%d\n", i);
}


i와 j값을 |(or) 연산합니다.

|(or)연산은 두개의 피연산자중 하나만 1이여도 결과가 1이되는 연산입니다.

5 => 00000101
4 => 00000100
-------------
결과 00000101 (5)


#include <stdio.h>

main()
{
 char i = 5;
 char j = 4;
 i = i ^ j;
 printf("%d\n", i);
}


i와 j값을 ^(xor)연산합니다.

^(xor)연산은 두 피연산자가 0이든 1이든 서로 다른 값을 가져야만 결과가 1이되는 연산입니다.

5 => 00000101
4 => 00000100
-------------
결과 00000001 (1)


#include <stdio.h>

main()
{
 char i = 128;
 
 i = ~i;
 printf("%d\n", i);
}


i값의 모든 bit를 반전시킵니다.

~연산은 피연산자의 bit를 모두 반전시키는 연산자입니다.

128 => 10000000
---------------
반전    01111111 (127)

'Programming > C C++' 카테고리의 다른 글

[C, C++] Object(obj)와 Link  (0) 2011.02.10
[C, C++] 상수(숫자, 문자, 문자열, 열거형) 정의및 사용  (0) 2011.02.09
[C, C++] 연산자  (0) 2011.02.08
[C, C++] 제어문  (0) 2011.02.01
[C, C++] 공용체  (0) 2010.09.27
[C, C++] Volatile  (0) 2010.09.15
0 0