我有下面的函数,它将把一个浮点数转换成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或类似的位置!

10-06 02:03