【发布时间】:2014-07-05 05:59:00
【问题描述】:
以下代码使用 g++ 而不是 gcc 编译,我想知道为什么?
inline unsigned FloatFlip(unsigned f)
{
unsigned mask = -int(f >> 31) | 0x80000000;
return f ^ mask;
}
我会假设在 C++ 中,
int(f >> 31)
是一个构造函数,但这让我想知道为什么它包含在代码中。有必要吗?
【问题讨论】:
-
有人用 C++ 而不是 C 编写代码 - 那么问题出在哪里?
-
int(f >> 31)是一个函数式转换;与 C 风格的(int) (f >> 31)含义相同。您需要演员表,以便您可以在结果上使用-(一元否定),因为f,并且通过扩展f >> 31是unsigned。 -
也就是说,这是一个非常糟糕的代码,因为它取决于
int在系统中的表示的细节。一个补码系统和一个二进制补码系统会在这里给你完全不同的结果...... -
这个演员阵容有多重要?
-
@LưuVĩnhPhúc:很遗憾,我也注意到了这一点。阿斯拉维尔一直问问题,期待帮助是很不礼貌的,但是他懒得给那些试图帮助他的人打勾……这与声誉无关,但人们会不必要地继续访问他的问题因为在首页上,它显示为没有可接受的答案...那是浪费时间...