equal 이 false 를 의미하는 C ++ 규칙은 무엇입니까 ? 주어진:
float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));
예 : https://godbolt.org/z/fcmx2P
#include <iostream>
int main()
{
float f {-1.0};
const float cf {-1.0};
std::cout << std::hex;
std::cout << " f" << "=" << static_cast<unsigned>(f) << '\n';
std::cout << "cf" << "=" << static_cast<unsigned>(cf) << '\n';
return 0;
}
다음과 같은 출력을 생성합니다.
f=ffffffff
cf=0
6
공감하기 : 당신은 정의되지 않은 행동에 대해 잊혀진 규칙에 사로 잡혔습니다!
—
Bathsheba
음수 부동 소수점을 부호없는 것으로 변환하는 결과는 무엇입니까?
—
아마데우스
@Amadeus는 아마도 음의 정수를 변환 할 때 얻을 수있는 일반적인 랩입니다. 그것이 나를 놀라게했기 때문에 그것이 UB인지 확인해야했습니다.
—
AProgrammer
@Amadeus는 차이를 이해하는 경우가 더 많았습니다. 몇 주 전에 오타 버그를 수정했습니다 ... const-float는 명시 적으로 부호없는 (버그)로 캐스팅되고 암시 적으로 부호있는 함수 매개 변수로 다시 서명됩니다. 나중에 원래 버그가 왜 함수에서 0 값을 유발하는지에 대해 숙고했습니다. 테스트에 따르면 float가 const이기 때문입니다. 서명되지 않은 명시 적으로 캐스팅 한 후 암시 적으로 같은 bahaviour 발생하지 않았다 다시 서명에 캐스팅 const가 아닌 플로트 - 두번 캐스트 const가 아닌이 있었다 원래 예상 값입니다.
—
GreyMattR