인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

정승우님의 프로필 이미지
정승우

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

타입변환#2 질문있습니다.

작성

·

223

0

// [2] 참조 타입 변환
    // 특징) 비트열을 재구성하지 않고, '관점'만 바꾸는 것
    // 거의 쓸일은 없지만, 포인터 타입 변환도 '참조 타입 변환' 동일한 룰을 따르니까 1석2조로 공부하자
    {
        int a = 123456789; // 2의 보수
        float b = (float&)a; // 부동소수점(지수 + 유효숫자)
        cout << b << endl;
    }

강의중 나왔던 코드입니다.

float b = (float&)a; 의 문법이 이해가 잘 안됩니다..ㅠㅠ

float타입의 b변수에 왜 float& (<<< 저는 이걸 주소라고 생각하고있습니다.) 형변환을 해서 넘기는지 모르겠습니다.

a를 float주소형태???? 로 변환?? 이게 잘 이해가안됩니다..

저렇게 해서 넘기면 b에는 포인터처럼 주소가 들어있어야 하는게 아닌가요?..

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

int a = 참조타입;
을 하면 a에 주소가 들어가는게 아니라 복사가 일어납니다.
(애당초 a는 포인터나 참조값이 아님!!)

마찬가지로 float a는 4바이트 부동소수점이니
float a = 참조타입;을 해도 값이 복사되어 들어갑니다.

정승우님의 프로필 이미지
정승우
질문자

// [1] 값 타입 변환
    // 특징) 의미를 유지하기 위해서, 원본 객체와 다른 비트열 재구성
    {
        int a = 123456789; // 2의 보수
        float b = (float)a; // 부동소수점(지수 + 유효숫자)
        cout << b << endl;
    }

    // [2] 참조 타입 변환
    // 특징) 비트열을 재구성하지 않고, '관점'만 바꾸는 것
    // 거의 쓸일은 없지만, 포인터 타입 변환도 '참조 타입 변환' 동일한 룰을 따르니까 1석2조로 공부하자
    {
        int a = 123456789; // 2의 보수
        float b = (float&)a; // 부동소수점(지수 + 유효숫자)
        cout << b << endl;
        b = (int&)a;
        cout << b << endl;
    }

 

그렇다면 위에서 

int a = 123456789; << 0x075bcd15 인데

(float)a 는 0x075bcd15라는 값을 부동소수점으로도 123456789가 되게끔 바꾸는거고

(float&)a는 0x075bcd15를 유지시킨채 float로 표현을한건가요?

 

Rookiss님의 프로필 이미지
Rookiss
지식공유자

그렇습니다!

정승우님의 프로필 이미지
정승우

작성한 질문수

질문하기