#define SCALE (1 << 31)
#define fix_Q31_80(x) ((int) ((float)(x)*(float)0x80000000))
#define fix_Q31_SC(x) ((int) ((float)(x)*(float)SCALE ))
int main()
{
int fix_80 = fix_Q31_80(0.5f);
int fix_sc = fix_Q31_SC(0.5f);
}
fix_80
とfix_sc
の値が異なるのはなぜですか?定義(1 << 31)または0x80000000を使用していますか?結果が異なる
fix_80 == Hex:0x40000000
fix_sc == Hex:0xc0000000
誰が知っていますか? UBはUB、[IBはIB](http://stackoverflow.com/questions/26331035/why-was-1-31-changed-to-be-implementation-defined-in-c14)です。予測可能な結果が必要な場合は実行しないでください。 –
'(1 << 31)!= 0x80000000' – Peter
ビットシフト時に符号付き整数型を使用しないでください –