我有这段简单的代码:
Logger::LogFloat("width", m_BMPLoader->GetWidth());
Logger::LogFloat("height", m_BMPLoader->GetHeight());
Logger::LogFloat("width / 4", (m_BMPLoader->GetWidth() / 4));
Logger::LogFloat("height / 4", (m_BMPLoader->GetHeight() /4));
Logger::LogFloat("-width / 4", -(m_BMPLoader->GetWidth() / 4));
Logger::LogFloat("-height / 4", -(m_BMPLoader->GetHeight() / 4));
Logger::LogFloat("-width /4 * Plane", -(m_BMPLoader->GetWidth() / 4) * PLANE_WIDTH);
Logger::LogFloat("-height / 4 * Plane", -(m_BMPLoader->GetHeight() / 4) * PLANE_WIDTH);
给出这个结果:
width: 128
height: 128
width / 4: 32
height / 4: 32
-width / 4: 4.29497e+009 //should be -32
-height / 4: 4.29497e+009 //should be -32
-width /4 * Plane: 4.29497e+009 //should be -160
-height / 4 * Plane: 4.29497e+009 //should be -160
编辑:解决了。我使用unsigned int并签名。
答案 0 :(得分:1)
如果x
是unsigned int
,则-x
也是unsigned int
,其值为pow(2,n)-x,其中n
是unsigned int
中的位数。
您需要在某处签名到有符号类型(整数或浮动类型)。
答案 1 :(得分:1)
无符号算术对某些值n进行模2 ^ n运算。 -(m_BMPLoader->GetWidth() / 4)
实际上被计算为2 ^ 32 - 32,大约是4294967264 - 因此是您的结果。