C++ 将uint64转换为uint32

C++ 将uint64转换为uint32,c++,C++,我有一个uint64变量…但是我想要传递它的函数只接受uint32 我尝试使用静态无符号int-ToUInt32(uint64变量)引用MSDN,但它给出了一个精度丢失的错误 有没有办法在不丢失任何数据的情况下将uint64转换为uint32?没有。一加仑容器中不能装两加仑水,也不能将64位数据转换为32位值。没有。32位整数比64位整数小32位。64位整数可以包含32位整数可以包含的任何内容,但不能包含32位整数可以包含的任何内容。请仔细想想您要做的事情。您正在获取一个可能会占用64位的数字,

我有一个uint64变量…但是我想要传递它的函数只接受uint32

我尝试使用静态无符号int-ToUInt32(uint64变量)引用MSDN,但它给出了一个精度丢失的错误


有没有办法在不丢失任何数据的情况下将uint64转换为uint32?

没有。一加仑容器中不能装两加仑水,也不能将64位数据转换为32位值。

没有。32位整数比64位整数小32位。64位整数可以包含32位整数可以包含的任何内容,但不能包含32位整数可以包含的任何内容。

请仔细想想您要做的事情。您正在获取一个可能会占用64位的数字,然后将其减半。 当然,在这种情况下,您将丢失数据

如果您确定给定的数字不会大于uint32,则可以尝试此方法

uint64 largeNumber = 9876543210;
uint32 smallNumber = largeNumber & 0xFFFFFFFF;
但如果大于32位,则会丢失一半的数字

有没有办法在不丢失任何数据的情况下将uint64转换为uint32

可以,但前提是您知道可能的uint64值的某些特征,并且这些特征允许无损转换

最有可能与此相关的是知道您的值永远不会超过uint32的最大值。在本例中,您实际拥有的是一个存储在64位中的32位值,转换只是更改其存储方式,而不是更改值。要在这种情况下进行转换,只需对其进行强制转换,例如使用static_cast


如果您想要处理任意uint64值,那么这是不可能的。如果可能的话,您可以通过反复应用转换将任何文件(包括40 TB的数据库)压缩为单个32位值。

实际上,水的压缩效果比数字好得多。假设两加仑水的压力为X,那么对于一加仑体积的相同质量,很可能存在一个可行的压力Y。@Fred我刚刚回顾了monty python和非洲燕子+1!!@弗雷德真的吗?我的高中科学老师告诉我水是不可压缩的。诅咒,再次欺骗!(加上数字有时也是可压缩的……zlib可以处理非常大的,不那么随机的数字)发现了这个链接:它给出了你在水上可以实现的压缩量的公式。“在太平洋底部约4000米的深度处……分数体积压缩率仅为1.8%。”因此,也许在我们银河系中心附近的某个地方,据说有一个巨大的黑洞,如果你在那里扔2加仑的水,它会装满一个1加仑的容器(考虑到容器的强度足以承受孔的作用力!)了解uint64的来源、此函数的作用以及调用它的原因可能会有所帮助。