다음 코드를 컴파일합니다.
double getDouble()
{
double value = 2147483649.0;
return value;
}
int main()
{
printf("INT_MAX: %u\n", INT_MAX);
printf("UINT_MAX: %u\n", UINT_MAX);
printf("Double value: %f\n", getDouble());
printf("Direct cast value: %u\n", (unsigned int) getDouble());
double d = getDouble();
printf("Indirect cast value: %u\n", (unsigned int) d);
return 0;
}
출력 (MSVC x86) :
INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483648
Indirect cast value: 2147483649
출력 (MSVC x64) :
INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483649
Indirect cast value: 2147483649
에서 Microsoft 설명서 에서 전환으로 최대 값의 정수 서명에 대한 언급이없는 double
하려면 unsigned int
.
위의 모든 값 은 함수가 반환 될 때 INT_MAX
잘립니다 2147483648
.
내가 사용하고 비주얼 스튜디오 2019 프로그램을 구축 할 수 있습니다. 이것은 gcc 에서는 발생하지 않습니다 .
내가 뭔가 잘못하고 있습니까? 로 변환하는 안전한 방법 double
이 unsigned int
있습니까?