我试图从函数中返回两个32位int值(_mouseX和_mouseY),首先将它们打包成64位值,然后在我使用它们时将它们解压缩到代码中的其他位置。但是,当我通过此功能时,数据完全不正确。我已经确认原始的_mouseX和_mouseY数据以及SetOrientation函数都没问题;这个问题是在这个GetMouseXY函数中使用的比特移位或者铸造或类型的某个地方。你能看一下吗?感谢。
long int Input::GetMouseXY()
{
return (_mouseX << 32) |_mouseY;
}
long int mouseY = pInput->GetMouseXY() & 0xFFFFFFFF;
long int mouseX = (pInput->GetMouseXY() >> 32) & 0xFFFFFFFF;
_CamPosition->SetOrientation(XMFLOAT3((float)mouseY, (float)mouseX, 0.f));
答案 0 :(得分:1)
使用(long int)_mouseX<<32|_mouseY
,因为在转换32之前需要转换为64位类型。
两个注意事项:首先,如果您需要64位类型,请使用std::uint64_t
。第二:为什么不为此使用结构?像
struct MouseCoord {
uint32_t x, y;
};
MouseCoord Input::GetMouseXY();
更清楚地看到,发生了什么。