2015-01-28 2 views
3

프로모션에서 데이터 형식을 더 큰 데이터 형식 (예 : short에서 int)으로 변환한다는 것을 알면 확실하지 않습니다.전환 및 프로모션이 동일한 것입니까?

또는 승격이란 데이터 형식을 다른 호환 가능한 데이터 형식으로 변환하는 것을 의미합니다. 예를 들어 shortint으로 변환하면 동일한 비트 패턴이 유지됩니다 (추가 공간은 0으로 채워짐). 그리고 변환은 intfloat으로 변환하는 것입니다. 그러면 완전히 다른 비트 패턴이 생성됩니까?

답변

4

프로모션이라고하는 두 가지가 있습니다 : 통합 프로모션과 부동 소수점 프로모션. 적분 승격이란 "큰"정수 유형으로 변환되는 정수 유형 (비트 필드 및 enum 초 포함)을 말하며 부동 소수점 프로모션은 구체적으로는 float에서 double까지입니다.

두 가지 유형의 프로모션은 더 넓은 범위의 전환의 하위 집합입니다.

  • char ->int : 적분 촉진
  • float ->double : 부동 소수점 촉진
  • int ->char [축소] 변환 (하지 프로모션)
  • int ->float : 전환
  • const char* ->std::string : 전환
  • Foo ->Bar : 변환이 정의되지 않았습니까?
+0

그래서 정수 형식에서 부동 소수점 형식으로 변환하는 것은 승격이라고하지 않습니다 (부동 소수점 형식이 정수 형식의 모든 값을 나타낼 수있는 경우에도)? –

+0

@rony_t 그렇지 않습니다. 그것은 단지 전환 일 것입니다. – Barry

5

승진이 값을 변경하지 않는 것이 확실한 내장 된 유형에 대한 변환의 특정 종류이다.

유형 정확하게 당신이에서 을 추진하는 유형의 가능한 값을 표시 할 수 있어야합니다 에를 추진하고 있습니다.

Here is a list ("숫자 프로모션"제목).

+0

승진과 같은 일이 그렇게 넓습니까? –

+0

@rony_t * integer * promotion을 설명하기 위해 "확장"하는 소리 만 들었습니다. 왜 그래도. 그것은 유효한 새로운 질문 일 수 있습니다. –

+0

확대는 표준의 용어가 아닙니다. – Barry

관련 문제