【发布时间】:2017-12-02 12:35:31
【问题描述】:
我试图从一个函数中返回两个 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));
【问题讨论】:
-
将 32 位值移动 32 个位置是未定义的。您必须将其设为 64 位 first。
-
编译器应该警告你这个错误。你读过编译器警告吗?如果编译器静音,请提高警告级别(如 g++ -Wall 等...)。
标签: c++ bit-manipulation long-integer bit-shift unsigned