3.8 대입연산자    [doc]    [smts]

대입 연산자 “=”는 두 개의 피연산자를 갖는 이항 연산자이다. 연산식에서 우변에서 구해진 값을 좌변의 변수에 저장하는 역할을 한다. 대입연산자는 아래 [표 1]에 보인 바와 같이 여러 가지 종류가 있다. 단순 대입연산자 ‘=’와 관계연산자 ‘==’는 확실히 구분해야 함은 다시 한 번 강조한다.


[표 3.8.1] 대입연산자의 종류

대입연산자

수행 동작

=

좌측값을 우측변수로 대입

+=, -=

좌값과 우값을 더한(뺀) 후 좌측에 저장

*=, /=

좌값과 우값을 곱한(나눈) 후 좌측에 저장

%=

좌값을 우값으로 나눈 나머지를 좌측에 저장

&=, |=, ^=

좌값과 우값을 AND/OR/XOR 한 후 좌측에 저장

<<=, >>=

좌값을 우값으로 왼쪽/오른쪽 비트이동한 후 좌측에 저장


 위 표에서 보듯이 대입연산자들 중 “연산자=” 의 형태를 갖는 것들이 있다. 예를 들어서 다음 두 줄은 같은 일을 수행한다.


a += b;

a = a + b;


이 두 표현식은 완전히 동일하며 보통 줄여서 전자와 같이 사용한다. 또 다른 예로


a += b + 10;
a = a + (b+10);

이 두 줄도 완전히 동일하다. 우변이 먼저 구해진 후 그 값을 이용하여 좌변의 변수를 갱신시키는 것이다. 대입 연산자의 우선 운위가 가장 낮다.


몇몇 예를 다음 표에 더 들었다.


[표 3.8.2] 대입 연산자의 용례들

용례

동일식

동작

x -= 20;
x = x-20;

x에서 20을 뺀다.

x *= 5;
x = x*5;

x에 5를 곱한다.

x %=10
x = x%10

x에 x를 10으로 나눈 나머지를 저장한다.

x += y-5
x=x+(y-5)

x에 (y-5)를 더한다.


다음 예를 입력하고 결과를 확인하여 보자.


ex03-11.c
#include "stdio.h"
int main(void) {
 int ia=1, ib=10;
 ia++;
 ib -= ia;
 ia *= ib++;
 ia %= --ib;
 printf(“ia:%d, ib:%d”, ia, ib);
}

ia:?? , ib:??

단순 대입연산자 =는 한 표현식에서 중복으로 사용할 수 있다. 예를 들면


a = 0;
b = 0;
c = 0;

이 세 줄은 다음과 같이 한 줄로 줄일 수 있다.


a = b = c = 0;


이 때 연산은 오른쪽에서 왼쪽으로 순차적으로 일어난다. 따라서 먼저 c=0을 수행하고 그 결과 값을 다시 b에 대입하고 마지막으로 a에 대입한다.


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

C/C++의 bitwise-and 연산  (0) 2015.05.20
C/C++의 비트 연산자의 종류  (0) 2015.05.20
C/C++의 증감연산자(++, --)  (0) 2015.05.19
C/C++의 조건 연산자(?:)  (0) 2015.05.19
C/C++의 논리 연산자  (0) 2015.05.19
Posted by 살레시오
,

3.7 증감연산자    [doc]    [smts]

증감 연산자 ++와 --는 한 개의 피연산자를 갖는 단항 연산자로서 피연산자를 1씩 증가 혹은 감소시키는 것이다. 피연산자로서 정수형과 실수형 모두 사용할 수 있으나 주로 정수형 변수에 사용된다. 증감연산자는 수식을 간결하게 만들어주므로 디버깅이나 실행속도 면에서 좀 더 효율적이다. 이 연산자는 C/C++ 에서 매우 자주 쓰이는 연산자이지만 잘못 사용한 경우에는 발견하기 힘든 오류을 발생시킬 수 있으므로 주의해서 사용해야 한다.


[표 3.71] 증감 연산자의 종류와 용법

형식

의미

++x

x를 먼저 1증가시킨 후 그 값을 사용

--x

x를 먼저 1감소시킨 후 그 값을 사용

x++

x값을 먼저 사용한 후 1 증가

x--

x값을 먼저 사용한 후 1 감소


위 표에서와 같이 증감연산자는 변수 앞에도 붙을 수 있고 뒤에 올수도 있다.  ++x 나 x++ 는 프로그램에서 다른 조건식이나 수식에 연결되지 않고 단일문으로 쓰일 경우에는 같은 결과를 얻지만 수식의 일부분으로 사용할 경우에는 그 의미가 달라질 수 있다. 다음 예를 보자.


ex03-09.c
#include<stdio.h>
int main()
{
  int ia, ib;
  ia = ib = 1;
  ia++;
  ib--;
  printf(“ia:%d, ib:%d”, ia, ib);
}

이 예에서 출력되는 ia와 ib값은 각각 2와 0이다. ia++, ib--은 각각 다음과 같다.


ia = ia + 1;
ib = ib - 1;

다음 예에서와 같이 증감연산자가 다른 연산자와 사용될 때에는 주의해야 한다.


ex03-10.c
#include<stdio.h>
int main()
{
  short sa = 10, sb = 10, sx, sy;
  sa++;
  ++sb;
  printf(“sa:%d, sb:%d\n”, sa, sb);

  sx = --sa;
  sy = sb--;
  printf(“sa:%d, sb:%d\n”, sa, sb);
  printf(“sx:%d, sy:%d\n”, sx, sy);
}

sa:11, sb:11
sa:10, sb:10
sx:10, sy:11

이 예제에서 sa에 저장되는 값과 sb에 저장되는 값은 각각 10과 11이다. sx=--sa 에서는 sx에 대입되기 전에 먼저 sa값이 1 감소하고 그 후에 그 값이 sx에 대입된다. sy=sb-- 에서는 sy에 sb값이 먼저 대입되고 sb값이 1 감소한다. 증감연산자가 앞에 붙느냐 혹은 뒤에 붙느냐에 따라 동작의 순서가 달라진다는 점에 유의해야 한다.


 관례적으로 증감연산자를 쓰지 말아야 할 경우가 있다.


  1. 하나의 변수가 수식 내에서 두 번 이상 사용될 경우에는 증감연산자를 사용하지 않는다. 예: y = x*2 + x++

  2. 한 변수가 어떤 함수의 인자로 두 번 이상 사용될 경우에는 이 변수에 증감 연산자 ++, --를 사용하지 않는다. 예: func(x*2, x++)


그 외에도 프로그램 작성자가 혼동의 여지가 있을 것 같다면 명확하게 작성하도록 유의해야 한다.



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

C/C++의 비트 연산자의 종류  (0) 2015.05.20
C/C++의 대입연산자  (0) 2015.05.20
C/C++의 조건 연산자(?:)  (0) 2015.05.19
C/C++의 논리 연산자  (0) 2015.05.19
3.4 관계 연산자  (0) 2015.05.19
Posted by 살레시오
,

3.6 조건연산자    [doc]    [smts]

조건 연산자(혹은 삼항 연산자라고도 한다)의 형식은 다음과 같다.


(조건식) ? 표현식1 : 표현식2;

조건연산자는 조건식이 참일 경우에는 표현식1을 선택(혹은 수행)하고, 거짓인 경우에는 표현식2를 선택(혹은 수행)시키는 연산자이다. 표현식에는 상수, 변수, 수식, 함수 호출 등이 올 수 있다.


예를 들어보면 다음과 같다.


(fa > fb)? printf(“true”):printf(“false”);
ir = ( i > j ) ? 1 : 0 ;
ir = ( ca == cb ) ? (ia+ib) : (ia-ib) ;

이 연산자는 if~else 문을 줄여서 쓴 형태라고 볼 수 있으며 if~else보다 간결하므로 단순 비교의 경우에는 자주 사용된다.


이것을 이용하여 두 수 중 큰 것을 구하는 간단한 프로그램을 작성해 보자.


int ia = 5, ib = 7, max;
max = (ia>ib)? ia:ib;

이 프로그램을 다음과 완전히 동일하다.


int ia=5, ib = 7, max;
if (ia>ib) {
  max = ia;
} else {
  max = ib;
}

또 다른 예를 들어보자.


ex03-08.c
#include<stdio.h>
int main()
{
  char cA = 'A', cB = '0';
  unsigned short usA;
  usA = (cA == 'A')? 1:0;
  printf("usA:%d\n", usA);
  (cB == 48)? printf("cB:'0'\n"):printf("cB: not '0'\n");
}

실행 결과

usA:1
cB:'0'

 조건 연산자는 사용 빈도가 높은 편이므로 잘 익혀두어야 한다.



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

C/C++의 대입연산자  (0) 2015.05.20
C/C++의 증감연산자(++, --)  (0) 2015.05.19
C/C++의 논리 연산자  (0) 2015.05.19
3.4 관계 연산자  (0) 2015.05.19
3.2 산술 연산자와 부호 연산자  (0) 2015.05.19
Posted by 살레시오
,