Page
2020-02-01 13:31:53
5
775

스택에서 형변환? 질문입니다.



 int a=10

 double b =3.5

 a += b를 할경우 스택에서 어떤 변화가 생기는지 궁금합니다.


 a 위에 b가 쌓이고, 그 이후에 a에 b를 더하면 b 위에 a라는 double형이 새로 생기는건지 a와 b 사이에 공간이 있어서 a가 그만큼 차지하게 되는건지..

 

-3
0
  • 댓글 5

  • MKRO
    498
    2020-02-01 14:41:19 작성 2020-02-01 14:43:27 수정됨

    a가 double이 되는게 아니고 b가 int가 되지 않나요?

    -2
  • Page
    2020-02-01 15:07:00
    3.5가 인트가 되나요?? 그렇다쳐도 a는 13.5를 담아야하기때문에 어떻게든 변화가 있어야할거같아요.
  • MKRO
    498
    2020-02-01 18:25:25

    a 타입이 int이기 때문에 13이 담길거라는 뜻이었습니다

  • 니르바나
    2k
    2020-02-01 20:23:43

    내부적으론 int a = 10 

    메모리에 올라가있는 10에

    double b 자동으로 int형으로 캐스팅 하고 메모리에 3이 올라가서

    10올라가있는 메모리에 3이 더해지는거 아닌가요?

    그리고 3.5는 할당 해제되구요.

  • 돈까스
    5k
    2020-02-03 02:34:06 작성 2020-02-03 02:38:40 수정됨

    무슨 언어인지 밝히지 않으셨는데 아마 C언어라고 생각하면요.

    연산을 할 때에는 double로 자동 형변환 되서 13.5로 계산 되구요. 

    그걸 다시 a라는 타입에 담을 때에 int로 캐스팅되면서 a에 13이 들어가게 됩니다.

    스택 개념을 제외하고 그냥 언어의 정의를 가지고만 설명하면 그렇습니다.


    그 과정에서 스택을 왜 말씀히는지는 정확히 모르겠지만, 혹시 사칙연산 계산하는 인터프리터 같은 거 만드시나요?

    스택은 표현식을 계산하기 위해서 사용하는 것이라고 생각하는데요.

    보통의 후위연산(posfix) 방식으로 계산식을 변경하여 계산하기 쉽도록 변형하고,

    후위연산 표현식의 값을 스택으로 계산하는데 사용하죠.


    그 이후에 a에 b를 더하면 b 위에 a라는 double형이 새로 생기는건지 a와 b 사이에 공간이 있어서 a가 그만큼 차지하게 되는건지.. 

    스택으로 연산을 하면 a와 b를 연산하기 위해서 a와 b를 pop하고, 두개를 합친 계산 결과를 push하게 되겠죠.

    스택으로 계산하는 머신을 상상하셨다면, 스택에 값은 그냥 넣은 순서대로 들어가게 되는 것이구요.

    계산하기 위해서 사용한다면 계산이 끝나면 이미 넣은 두 값이 없어지고 연산 결과가 들어가는 게 맞습니다.


    a, b의 공간이라든가 b위에  a라는 double형 같은 표현으로 볼 때에 스택을 특정 자료형을 담는 변수를 구현하기 위해서 사용한다고 생각하시는 것 같은데, 그렇게 사용하지는 않을 것 같습니다

    스택을 쓰는 이유는, 어셈블리언어를 공부하거나 오토마타를 공부해보시면 아시겠지만, cpu가 계산할 때 몇개 안되는 레지스터를 가지고 연산을 하는데, 가장 최소화한 저장구조를 이용해서 연산을 하는 방식이 스택이라서 스택 구조가 사용하기 적합하기 때문입니다.

    근데 그 스택은 연산을 위한 것이지 변수(간접 참조)를 위해서 사용하는 것은 아닙니다.


    원하시는 답변인지 모르겠으나 질문을 더 구체적으로 하시면 좋을 것 같습니다.

    이것에 대해서 자세히 알고 싶으시면 컴파일러나 인터프리터 공부를 하시거나 컴퓨터 구조(어셈블리 언어) 같은 것을 공부하셔야 할 것 같습니다.


  • 로그인을 하시면 댓글을 등록할 수 있습니다.