development

`float`를 초기화 할 때`float`로 캐스팅하는 것과 접미사로`f`를 추가하는 것의 차이점은 무엇입니까?

big-blog 2020. 12. 3. 08:04
반응형

`float`를 초기화 할 때`float`로 캐스팅하는 것과 접미사로`f`를 추가하는 것의 차이점은 무엇입니까?


차이점은 무엇입니까

float f = (float) 99.32 ;

float f = 99.32f ;

둘 다 성공적으로 컴파일되고 실행되었습니다.


float f = 99.32f ;

이것은 float리터럴 입니다. 즉 , float값이 직접 할당되는 부동 변수를 의미합니다 .

float f = (float) 99.32 ;

이는 float할당 되기 전에 double캐스트 되는 이 할당 된 변수입니다 float.


차이는 최적화 될 수 있지만 첫 번째 경우에는 float로 형변환되는 이중 리터럴이 있고 두 번째 경우에는 float 리터럴이 있습니다.

최적화되지 않은 경우 두 번째 예제의 코드에서 typecast를 얻을 수 있습니다.

그러나 결과가 (라운딩 모드에 따라) 약간 다를 수있는 코너 케이스가 있습니다. 숫자를 정확하게 표현할 수없는 경우 첫 번째 경우에는 두 번 반올림됩니다. 먼저 소수점 표시를 double로 반올림 한 다음이를 부동 소수점으로 반올림 할 때, 첫 번째 경우에는 소수점 표시를 직접 반올림합니다. 플로트에.


캐스트 99.32없는 첫 번째 경우 는 float가 아닌 double로 해석됩니다.

이중 리터럴이 부동으로 캐스팅됩니다.

두 번째 경우 f에는 컴파일러 99.32가 float로 처리되는지 확인 하는 접미사 있습니다.


float f = (float) 99.32;에서 리터럴 99.32double기본적으로 유형으로 생성 된 다음 float.

라인에서 float f = 99.32f ;리터럴은으로 만든 float인해 후행에 유형 f99.32f더 타입 캐스팅이 필요하지 않습니다.

후자는 유형이 일치하는 유형의 변수에 직접 할당되므로 작성 double f = 99.32;하는 것과 유사 double합니다.


접미사가없는 부동 소수점 리터럴은 기본적으로 double유형입니다.

따라서 float f = (float) 99.32;먼저 a 에 유형 이있는 명시 적으로 리터럴 99.32캐스트 한 다음 변수에 할당한다고 명시 합니다 .doublefloatf

Stating float f = 99.32;은 동일한 작업을 수행하지만이 경우 유형 간의 변환은 암시 적으로 수행됩니다.

당신이 암시 적 변환을 피하려면 당신이 사용해야 f당신의 문자를 정의하는 접미사 (예 float f = 99.32f;)


차이점은 리터럴 99.32은 double 유형이고 리터럴 99.32f은 float 유형이라는 것입니다.

첫 번째 문은 float 리터럴을 float 변수에 할당합니다. 특별한 것은 없습니다.

두 번째 문은 double 리터럴을 float로 캐스팅하고 그 결과를 float 변수에 할당합니다.

표준에 관한 한, 명시 적으로 직접 캐스팅하지 않고 double 리터럴을 float 변수에 할당 할 수 있습니다. 이 경우 암시 적 캐스트가 발생합니다. 예 :

float f = 99.32;

당신은 할 수 있습니다 :

float f = (double) 10.5f;

오른쪽은 여전히 ​​암시 적으로 부동 소수점으로 변환됩니다.

대부분의 최신 컴파일러는이를 최적화하므로 float를 나타내는 것은 일반적으로 스타일과 선호도의 문제입니다. 일관성을 유지하십시오.

참고 URL : https://stackoverflow.com/questions/33163772/what-is-the-difference-between-casting-to-float-and-adding-f-as-a-suffix-whe

반응형