将uint64转换为uint32

SPB*_*SPB 4 c++

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

我尝试使用static unsigned int ToUInt32(uint64 variable); 引用MSDN,但它给出了精度丢失的错误.

有没有办法将uint64转换为uint32而不丢失任何数据?

Jer*_*ner 7

不能.你不能将2加仑的水装入一加仑的容器中,而且你不能将64位数据装入32位值.

  • 实际上水压缩*比数字更好*.在压力X下给定2加仑的水,对于1加仑体积中的相同质量,可能存在可行的压力Y. (12认同)
  • @Fred 我刚刚想起了蒙蒂·蟒蛇和非洲燕子。+1!! (2认同)
  • @Fred真的吗?我的高中科学老师告诉我,水不可压缩.诅咒,再次撒谎!(加号也有时可以压缩...... zlib可以用于非常大的,不那么随机的) (2认同)
  • 发现此链接:http://hyperphysics.phy-astr.gsu.edu/hbase/permot3.html,它为您提供了可以在水上实现的压缩量的公式."在太平洋底部,深度约4000米......分数体积压缩只有1.8%左右",所以可能在我们银河系中心附近的某处,据称有一个巨大的黑洞,如果你去的话在那里放入2加仑的水,它将填充1加仑的容器(假设容器足够坚固以承受孔的力!) (2认同)

Joe*_*Joe 6

好好想想你想要做什么.你正在拿一个可能需要64位然后减半的数字.当然,在这种情况下你会丢失数据.

如果你确定给出的数字不会大于uint32那么你可以试试这个

uint64 largeNumber = 9876543210;
uint32 smallNumber = largeNumber & 0xFFFFFFFF;
Run Code Online (Sandbox Code Playgroud)

但如果它超过32位,这将失去你的一半数量.