3.2 산술연산자와 부호연산자    [DOC]    [SMTS]

 산술 연산자는 덧셈, 뺄셈 등 산술 연산을 수행하는 연산자들이고 부호 연산자는 부호를 지정하는 것들이다. 산술 연산자는 피연산자가 두 개이므로 이항 연산자이고 부호 연산자는 피연산자가 하나이므로 단항 연산자에 해당된다.


 사칙 연산자 +, -, *, /, % 는 덧셈, 뺄셈, 곱셈, 나눗셈 그리고 나눗셈의 나머지를 구하는 연산을 수행하는 이항 연산자이다. 예를 들면 다음과 같다.


int ia = 11, ib = 22, ic, id, ie;
ic = 1a + ib;
id = ia – ib;
ie = ia * ib;
double da = 1.1, db=2.2;
da = ie*ie;
db = da/ia;

 부호 연산자는 어떤 값의 부호를 지정하거나 바꾸는데 쓰인다. 여기서 +, -기호는 부호 연산자로도 사용되며, 부호 연산자는 한 개의 피연산자를 요구하는 단항 연산자이다.  예를 들면 다음과 같다.


+1234   -1234   -temp   +a   -b

따라서 다음과 같은 표현식에서 첫 번째 ‘-’는 부호연산자이고 두번째 ‘-’는 산술연산자이다.


ia = -ib - ic;

연산의 결과를 변수에 저장할 때는 결과 값이 그 변수의 허용 범위에 들어가는지 여부를 잘 판단해야 한다.


int ia = 2000000;
int ib = ia*10;
char ca = 129; // 오류
unsigned short usa = 50000, usb;
usb = usa + 20000; // 오류 발생

 나머지(%)연산의 예를 들면 다음과 같다.


10%5 // 0
3%2 // 1
8%3 // 2
3%5 // 3

한 가지 주의할 점은 %연산자의 피연산자는 정수형만 가능하다는 점이다. 예를 들어서,


a = b % c

는 변수 a에 변수 b값을 c로 나눈 나머지를 대입하는 것인데 변수 b와 변수 c는 정수형(char, short, int, long, long long과 각각의 unsigned 형)이어야 한다는 것이다.


다음 예제는 사용자로부터 하나의 숫자를 입력받아서 2로 나눈 나머지를 출력해 주는 프로그램이다.


ex03-01.c
#include <stdio.h>
int main(int argc, char** argv)
{
  int ia;
  scanf("%d", &ia); //정수를 입력받는다.
  printf("result:%d", ia%2);
}

실행 결과

123
result:1

이 예제에서 scanf()함수는 전에 설명한 대로 사용자로부터 입력을 받는 기능을 한다.  첫 번째 인수로 “%d”로 지정하면 정수를, “%f”로 지정하면 실수를 입력받아서 그 뒤의 변수에 그 값을 저장한다. 변수명 앞에 변수의 주소를 구하는 ‘&’를 꼭 붙여야 되므로 유의하자.


다음 예제는 두 수를 입력받아서 덧셈, 뺄셈, 곱셈, 나눗셈의 결과를 표시해 주는 프로그램이다.


ex03-02.c
#include <stdio.h>
int main(int argc, char** argv)
{
  float fa, fb;
  scanf("%f %f",&fa ,&fb); //두 수를 입력받는다.
  printf("fa+fb=%f\n", fa+fb);
  printf("fa-fb=%f\n", fa-fb);
  printf("fa*fb=%f\n", fa*fb);
  printf("fa/fb=%f\n", fa/fb);
}

1e5
12.34
fa+fb=100012.340000
fa-fb=99987.660000
fa*fb=1234000.015259
fa/fb=8103.727615

키보드로 숫자들을 입력할 때 공백 문자(스페이스바 혹은 엔터키)로 두 수를 입력해야 함에 유의하자.


 변수를 사용할 때에는 항상 저장할 수 있는 범위를 고려하여야 한다. 또한 나눗셈의 경우 0으로 나누는 경우가 발생하지 않는지 검토해 보아야 한다. 다음 예제를 실행시켜 보자. (변수명을 타이핑 할 때 대소문자를 반드시 정확히 입력해야 한다.)


ex03-03.c
#include <stdio.h>
int main(void)
{
   char cA = 123, cB = 10, cC = -100, cR1, cR2;
   unsigned char ucW = 110, ucX = 100, ucY = 200;
   unsigned char ucR1, ucR2;
   short sA = 1234, sB = 100, sR1, sR2;
   cR1 = cA + cB + cC;
   cR2 = cA / cB;
   ucR1 = ucW - ucY;
   ucR2 = ucX * ucY;
   sR1 = sA/sB;
   sR2 = sA%sB;
   printf("cR1=%d, cR2=%d\n", cR1, cR2);
   printf("ucR1=%d, ucR2=%d\n", ucR1, ucR2);
   printf("sR1=%d, sR2=%d\n", sR1, sR2);
}

실행 결과

cR1=33, cR2=12
ucR1=166, ucR2=32
sR1=12, sR2=34

이 예제에서는 ucR1과 ucR2 변수의 결과값이 unsigned char형의 범위를 벗어나므로 엉뚱한 값이 표시됨을 눈여겨봐야 한다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

C/C++의 논리 연산자  (0) 2015.05.19
3.4 관계 연산자  (0) 2015.05.19
3.3 형변환  (0) 2015.05.19
C/C++의 연산자 종류  (0) 2015.05.19
C/C++의 goto 명령  (0) 2015.05.19
Posted by 살레시오
,