수식과 연산자

* 컴퓨터 언어 (Computer Language)/C/C++




Section1 수식

 
수식이란? 계산을 위하여 변수, 상수, 연산자 등을 결합한 것을 수식이라고 한다. 이러한 수식은 다른 프로그래밍 언어에서의 수식과 마찬가지로 계산 결과를 반드시 왼쪽의 변수에 저장하도록 작성되어야 한다.

변수 = 수식 <- 수식의 처리 결과를 왼쪽의 변수에 대입하라
 
데이터의 형 변환
수식의 계산 결과는 왼쪽 변수의 데이터형에 따라 자동으로 변환되어 저장된다.

(1) 형이 다른 데이터의 대입

main()
{
     char a,b;
      int c,d;
      a=10;
      c=a;
      d=129;
      b=d
      printf("a=%d c=%d\n",a,c);
      printf("b=%d d=%d",b,d);
}

a의 값을 c에 넣는 경우에 a의 값이 c의 데이터형보다 작기 때문에 이상없이 데이터가 대입된다. 그러나 d의 값을 b에 넣는 경우에는 b의 데이터형인 char형에 저장할 수 있는 허용 범위인 127 을 넘어서므로 정확한 결과를 얻을 수 없다.



(2) 형이 다른 데이터끼리의 연산

데이터형이 다른 데이터끼리 연산을 할 경우에는 수식에서 가장 큰 데이터형으로 자동으로 형 변환이 이루어진 후 연산된다.

main()
{
   int a;
   float i,j;
   a= 10000;
   j=0.04;
   j=a*i;
   printf("\n원금 = %d",a);
   printf("\n년 이자율 = %f",i);
   printf("\n이자 = %f원\n",j);
}

위의 프로그램을 실행하면 가장 큰 데이터형인 float형으로 모두 변환된 후 결과가 다음과 같이 출력된다.

(3) 강제 형 변환
다음과 같이 변수 앞의 괄호 안에 데이터형을 지정해 주면 해당 데이터형으로 변환된다.

(데이터형)변수

main()
{
  int a;
  long int b;
  a=127;
  b=327600;
  b=b*(long)a;
  printf("a = %d\nb = %ld",a,b);
}

캐스트 연산자:강제로 형을 변환하기 위하여 괄호 안에 넣어주는 것을 캐스트연산자라고 한다.


Section02 연산자



산술연산자

C언어에서도 일반적인 사칙 연산을 위한 산술 연산자가 사용된다.

(1)이항 연산자
두 변수나 상수에 대한 연산을 처리하기 위한 연산자이다.

main()
{
  int a=20,b=10,c=5;
  a=b+c;
  printf("\n%d와 %d를 더한 값 = %d\n",b,c,a);
  a=b-c;
  printf("\n%d에서 %d를 뺀 값 = %d\n",b,c,a);
  a=b*c;
  printf("\n%d와 %d를 곱한 값 = %d\n",b,c,a);
  a=b/c;
  printf("\n%d에서 %d를 나눈 몫 = %d\n",b,c,a);
  a=b%c;
  printf("\n%d를 %d로 나눈 나머지 = %d\n",b,c,a);
}

(2)단항 연산자
피연산자의 개수가 한 개인 수식에 사용되는 것으로 값을 증감시키는 증가 증가 연산자와 감소 연산자, 그리고 부호를 표시하는데 사용되는 +,- 연산자가 있다.

 연산자  기능  사용 예
 ++  값을 1 증가시킨다.  a++,++a
 --
 값을 1 감소시킨다.  a- -, - -a
 +  부호를 표시한다.  +a
 -  부호를 반전 표시한다.  -a


단항 연산자의 경우에 대입 연산자를 사용하지 않을 수도 있다. 예를 들어 a++는 a=a+1 이라는 의미를 가지므로, a=a+1 대신 a++를 사용하여도 된다.
또한 단항 연산자를 앞에 사용하는 경우와 뒤에 사용하는 경우에 처리 결과가 달라질 수 있다.

main()
{
  int a,b;
  b=5;
  a=++b;
  printf("a의값은 %d이고,b의 값은 %d이다.",a,b);
}

위 프로그램의 실행결과는 a의 값과 b의 값이 모두 6으로 나타난다. 즉, b의 값이 1 증가된 후 a에 대입되어, 두 변수의 값이 모두 6으로 저장된 것이다.

main()
{
   int a,b;
   b=5;
   a=b++
   printf("a의 값은 %d이고,b의 값은 %d이다.",a,b);
}

위 프로그램을 실행하면 a의 값이 5이고, b의 값이 6으로 나타난다. 즉, a에 b의 값을 대입한 후 b의 값이 1 증가된 것이다.
위와 같이 증가 연산자와 감소 연산자는 변수의 왼쪽에 사용하느냐 오른쪽에 사용하느냐에 따라 다른 결과를 가져올 수 있으므로 주의하여야 한다.

대입 연산자

대입 연산자는 오른쪽 수식의 값을 왼쪽의 변수에 대입시켜주는 연산자로 다음과 같은 것들이 사용된다.

대입연산자의 종류와 기능
 연산자 기능0  사용 예
오른쪽의 값을 왼쪽의 변수에 대입한다.  a=b 
+= 왼쪽의 변수에 들어있는 값과 오른쪽 값을 더하여 왼쪽 변수에 대입한다.  a += b 
 -= 왼쪽의 변수에 들어있는 값에서 오른쪽 값을 뺀 후 왼쪽 변수에 대입한다.  a -= b 
 *= 왼쪽의 변수에 들어있는 값과 오른쪽 값을 곱하여 왼쪽 변수에 대입한다.  a *= b 
 /= 왼쪽의 변수에 들어있는 값을 오른쪽 값으로 나눈 후 왼쪽 변수에 대입한다.  a /= b 
 %= 왼쪽의 변수에 들어있는 값과 오른쪽 값으로 나눈 나머지를 왼쪽 변수에 대입한다.  a %=b 




관계 연산자

관계 연산자는 두 수의 대소 관계를 비교하기 위한 것으로, 연산자의 왼쪽에 있는 값과 오른쪽에 있는 값을 비교하여 대소 관계가 맞으면 참(1)을, 틀리면 거짓(0)을 반환한다. 관계 연산자는 결과에 따라 다른 처리를 하기 위한 조건문에 사용된다.

관계 연산자의 종류와 기능
 연산자 기능  사용 예 
 == 같다  a == b 
 != 같지 않다.  a != b 
 < 보다 작다.  a < b 
 <= 작거나 같다.  a <= b 
 > 보다 크다.  a > b 
 >= 크거나 같다.  a >= b 

main()
{
int a= 10,b=20;
printf("\na의 값은 %d이고,b의 값은 %d이다.\n",a,b);
printf("\n 두 수를 비교한 결과 1이면 a가 b보다 크고, 0이면 b가 a보다 크거나 같다.\n");
printf("\n두 수의 비교 결과는 %d이다.\n\n"a>b);
a*=2;
printf("\na에 2를 곱한 a의 값은 %d이고,b의 값은 %d이다.\n",a,b);
printf("\n두 수를 비교한 결과 1이면 a와 b와 같고, 0이면 a와 b가 다르다.\n");
printf("\n두 수의  비교 결과는 %d이다.\n\n",a==b);
}

C언어에서 관계 연산자는 = 기호보다 < 기호나 > 기호가 먼저 나와야 한다. = 기호가 먼저 나올 경우에는 에러가 발생한다.

논리 연산자
논리 연산자는 연산자의 왼쪽과 오른쪽의 값을 비교하여 두 값의 참과 거짓 값에 대한 논리적인 비교를 하여 참과 거짓을 반환한다. 논리 연산자는 여러 개의 조건을 지정하여 해당 조건을 모두 만족하거나 또는 하나의 조건만 만족하더라도 특정 처리를 실행하기 위한 조건문에 사용된다. 논리 연산자의 종류와 기능은 다음과 같다. 참은 1의 값을 가지고, 거짓은 0의 값을 갖는다.

논리 연산자의 종류와 기능 
 연산자 기능  사용 예 
 && 두 값(조건)이 모두 참이면 참을 반환한다.  a && b 
 || 두 값(조건)중의 하나라도 참이면 참을 반환한다. a || b 
 ! 오른쪽의 값(조건)이 참이면 거짓을, 거짓이면 참을 반환한다.   ! a 


main()
{
int a, b, c;
a=1;
b=1;
c=0;
printf("%d AND %d = %d\n",(a>c),(b>c),(a>c) && (b>c));
printf("%d AND %d = %d\n",(b>a),(b>c),(b>a) && (b>c));
printf("%d OR %d = %d\n",(a>c),(b>c),(a>c)||(b>c));
printf("%d OR %d = %d\n",(b>a),(b>c),(b>a)||(b>c));
printf("NOT %d = %d\n", (a>c),!(a<c));

}

조건 연산자
조건 연산자는 왼쪽의 조건에 따라 오른쪽의 문장을 처리하는 연산자로서 다음과 같은 형식을 갖는다.

조건식 ? 문장1 : 문장2

main()
{
int i=2,j=10;
(i>j) ? printf("\n%d가 %d보다 크다.\n",i,j) : printf("\n%d는 %d보다 크지 않다.\n",i,j);
}

위의 프로그램을 실행하면 i의 값이 j의 값보다 크지 않기 때문에 콜론(:)오른쪽의 문장이 출력된다. 

 


출처 : C를 뿌려라! C언어 입문

 

'* 컴퓨터 언어 (Computer Language) > C/C++' 카테고리의 다른 글

C언어  (0) 2012.03.22
C언어 입출력  (0) 2012.03.16
수식과 연산자  (0) 2011.12.22
02.C언어의 기초  (7) 2011.11.19
01.프로그래밍의 기초  (0) 2011.11.17
Name
Password
Homepage
Secret