[英]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.