Bitshifting long int返回错误的数据

时间:2017-12-02 12:35:32

标签: c++ bit-manipulation long-integer bit-shift unsigned

我试图从函数中返回两个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));

1 个答案:

答案 0 :(得分:1)

使用(long int)_mouseX<<32|_mouseY,因为在转换32之前需要转换为64位类型。

两个注意事项:首先,如果您需要64位类型,请使用std::uint64_t。第二:为什么不为此使用结构?像

struct MouseCoord {
    uint32_t x, y;
};

MouseCoord Input::GetMouseXY();

更清楚地看到,发生了什么。