我有一个像这样的值:

int64_t s_val = SOME_SIGNED_VALUE;

我如何获得
uint64_t u_val

s_val完全相同的位模式,但被视为未签名?

这可能真的很简单,但是在查看了Stackoverflow和其他地方之后,我还没有找到答案。

最佳答案

int64_t s_val = SOME_SIGNED_VALUE;
uint64_t u_val = static_cast<uint64_t>(s_val);

C++标准4.7/2指出:



另一方面,Standard说“由reinterpret_cast执行的映射是实现定义的。[注意:它可能会或可能不会产生与原始值不同的表示。]”(5.2.10/3)。因此,我建议使用static_cast

10-05 21:38