长时间返回错误的数据

Bitshifting long int returns wrong data

本文关键字:数据 错误 返回 长时间      更新时间:2023-10-16

我正在尝试通过将它们包装到64位值中,然后在我使用时在其他位置将它们解开,从而从函数中返回两个32位int value(_mousex和_mousey)。他们。但是,当我通过此功能获取数据时,数据完全不正确。我已经确认原始_ MOUSEX和_ MOUSEY数据以及设置方向功能都可以。问题在bitshifting中的某个位置,或者可能是在此GetMouseXy函数中使用的铸造或Teh类型。你能看看吗?谢谢。

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));

使用(long int)_mouseX<<32|_mouseY,因为您需要在32移动之前施放64位类型。

两个注释:首先,如果需要64位类型,请使用std::uint64_t。第二:为什么不使用结构?喜欢

struct MouseCoord {
    uint32_t x, y;
};
MouseCoord Input::GetMouseXY();

看到正在发生的事情要清楚得多。