我有以下函数,假设将 float 转换为 int32。问题是对于负数它根本不起作用(我的 if 语句没有执行)。我已经尝试了一个类似的程序,用于从 float 到 int16 的转换,一切正常。对不起,如果这太简单了,但我无法弄清楚我遗漏了什么以及为什么它不适用于负值。
#define MaxInt32 2147483647
#define MinInt32 -2147483648
…
bool CastFloatToInt32 ( float fNumber, int32 *ConvertedValue) {
bool CastStatus = False;
if ( ( fNumber >= MinInt32 ) && ( fNumber <= MaxInt32 ) ) {
*ConvertedValue = ( int32 ) ( fNumber );
CastStatus = True;
} else {
if (fNumber < MinInt32) {
*ConvertedValue = MinInt32;
} else {
*ConvertedValue = MaxInt32;
}
}
return CastStatus;
}
最佳答案
你可以在这里看到原因:https://stackoverflow.com/a/20910712/1073171
因此,您可以通过将定义更改为以下任一方式来修复此代码:
#define MaxInt32 (int32)0x7FFFFFFF
#define MinInt32 (int32)0x80000000
否则:
#define MaxInt32 (int32)2147483647
#define MinInt32 (int32)(-2147483647 - 1)
推理在我上面链接的答案中给出。如果您使用的是 GCC,您也可以随时移动到 -std=gnu99
或类似的!
关于将带有负数的 Float 转换为 Int32 失败,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30590771/