1580, 2/79 회원가입  로그인  
   Acacia
   C언어 문법 2 (문법 : 증감연산자의 이해)

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=1190 [복사]


안녕하세요~

저번에 글을 쓰면서 했던 말처럼 다시 새로운 글을 쓰게 되었습니다.
사실 별 반응이 없어 하지 말아야지 생각했지만(첫번째 댓글 보니 그래도 다행이다 싶어서;;;)

오늘은 사실 별로 유용하지 않을수도 있지만요
저와 같이 처음부터 하나하나 궁금해 하시고 뜯어보는 분들을 위해 이번글을 쓰게 되었습니다 ;;;

증감연산자가 어떤것인지도 대부분 다 아시고 사용하는 법도 다들 아시겠지만
어떤 식으로 그 연산이 이루어 지는지 아시는분은 적은것 같아서 이번글을 쓰게 되었습니다.

서론은 이것으로 하고요 ;; ㅋㅋ

전위증감연산사, 후위증감연산자의 차이는 모두 아실텐데요

int a = 0;
int b = 0;

b = a++;
의 값은 a = 1, b = 0 입니다.

int a = 0;
int b = 0;

b = ++a;
의 경우는 a = 1, b = 1 이죠

이런 연산이 어떻게 이루어 질까요?


정확하게 따지만 함수는 아니지만 이해를 돕기위해 이렇게 표현했습니다.
(정확하게는 저도 어떤 것인지는 모르나 내부 구조는 이런식이 맞습니다.)

전위증가연산자와 후위증가연산자만 보도록할께요.

감소연산자는 똑같은 원리로 돌아가는거니깐요


void ++(int &ref)  // 전위증가연산자.
{
ref += 1;
}

여기에서 보면 알수 있듯이 ++a 가 수행된다고 치면 a의 값에 바로 1이 더해진다는 것을 알 수 있습니다.


그럼 후위증가연산을 보면

int ++(int & ref)
{
int temp = ref;
ref += 1;
return temp;
}

a++에서 a의 내용을 temp에 임시저장한후 a의 값을 1증가 시키게 됩니다.
그리고 후에 내용을 보면 a를 리턴 시키는 것이 아니라 temp를 리턴시키는 것을 알수 있는데 temp를 리턴 시키기 때문에 그 연산의 수행 동안에는 a를 더하기 전의 값인 temp의 값을 사용하는 것이죠

그 연산이 끝나게 되면 a의 값을 다시 사용하기 때문에 a가 증가된 값을 사용하게 됩니다.

전위, 후위감소 연산자도 똑같은 원리로 사용되고요
전위, 후위증감연산자를 일종의 함수라고 생각 하시면 이해하기 쉬울 것이라고 생각 되네요

전위연산은 그 값이 바로 적용되기 때문에 상관이 없고

후위연산의 경우는 한줄, 정확히 말하면 ;을 만나기 전까지 그 값이 의미가 있는 것이죠

while(a++) 에서 a의 조건을 비교한후 a의 값을 증가시킨다던지
printf("%d", a++); 에서 a의 본 값을 표시하고 a의 값을 증가시킨다던지

하나의 구문을 기준으로 표시되는 것입니다.

오늘은 별로 쓸모 없는 내용이군요;;

다음에는 정말 사용할만한 내용을 가지고 작성하겠습니다 ;;









  Hit : 9084     Date : 2009/02/09 03:08



    
zhuji90 하핫.. 다음편을 기대하도록 하겠습니다. 2009/02/12  
1560   인터넷속도 빠르게 하는거랄까요...?[4]     abcc0579
10/21 7792
1559   클래스중 사설아이피 대역.[5]     abcc0579
06/13 9144
1558   C언어 문법 1 (응용 : 점수를 학점으로 변경하기)[8]     Acacia
02/05 8745
  C언어 문법 2 (문법 : 증감연산자의 이해)[1]     Acacia
02/09 9083
1556   C언어 문법 3 (응용 : scanf의 몰랐던기능)[7]     Acacia
02/15 10340
1555   [자작] 구글 검색법[13]     초콜렛나인
02/08 15313
1554   [자작] C++ 기초 플러스 # 1[3]     초콜렛나인
02/09 8328
1553   [링크+자작] 텔넷관련과 텔넷이 안될때의 해결법과 한글깨짐[6]     초콜렛나인
03/02 14714
1552   [링크] HTML 링크들..[5]     초콜렛나인
03/01 7404
1551   [정리] 해커스쿨 F.T.Z trainer 정리 1 ~ 5[11]     초콜렛나인
03/01 15914
1550   [정리] 해커스쿨 F.T.Z trainer 정리 6 ~ 10[2]     초콜렛나인
03/01 17807
1549   [자작후링크]KSSN 다시 씁니다 (제대로)[1]     초콜렛나인
03/07 13077
1548     [re] [자작]구글링을 막는 간단한팁[1]     초콜렛나인
03/12 10176
1547   파이프를 이용하라는데 키보드에서 파이프가 뭐죠?[4]     agnes794
12/03 6376
1546   [자작해설]백트랙의 정석*[2]     인천해커
01/20 7646
1545   백트랙의정석 제2-1강[5]     인천해커
01/21 13174
1544   힌트[10]     akwjs566
03/31 5982
1543   바이러스 만들기[8]     akwjs566
03/31 8894
1542   컴퓨터끄기[9]     akwjs566
04/10 6951
1541   혹스[3]     akwjs566
04/11 6417
[1] 2 [3][4][5][6][7][8][9][10]..[79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com