繁体   English   中英

除以无符号长长

[英]Dividing unsigned long long

当前尝试将 unsigned long long 除以 static 值。

unsigned long long 包含完成操作所需的微秒数。 我想取这个值并将其转换为秒。

这是代码片段:

double udDiffTime = ullHighResDiffTime / (unsigned long long)1000000;

在我的调试器的一种情况下,我可以看到 ullHighResDiffTime = 639。因此,udDiffTime = 0.000639。 但是,我得到 udDiffTime = 0。

我确定我在某处犯了错误。 我尝试使用 1000000LL 而不是使用 (unsigned long long) 进行投射,但没有区别。

您正在执行 integer 除法,因此如果结果为 0.000639,它将被截断为 0。

如果您想要一个浮点结果,则必须使用至少一个浮点操作数。 例如,尝试将(unsigned long long) 1000000更改为1000000.0

unsigned long long 的范围可达 18,446,744,073,709,551,615。 double精度最高可达 1.7E308(即,具有 308 个零的一)。 问题是值越高,它的精度就越低,所以你需要问自己的是,大值是否真的需要那么精确,或者数字的大小是否更重要。

将其更改为

double udDiffTime = ullHighResDiffTime / 1000000.0;

得到你期望的结果。

unsigned long long是整数类型,所以使用整数除法。 只有在除法之后才会将值转换为double 尝试除以1000000.0

如果ullHighResDiffTime的类型是无符号长整数,那么您将 integer 除以 integer,它不会调用浮点运算。

改用这个:

double udDiffTime = ullHighResDiffTime / 1000000.0;

将 unsigned long long (或任何整数)除以相同的类型会产生相同的类型。 然后将值转换为 double,但结果已经为零。

将其除以双倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM