划分无符号长长

时间:2011-06-29 07:58:28

标签: c++ math casting

目前正试图将无符号长整数除以静态值。

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

以下是代码snippit:

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

在我的调试器的一个案例中,我可以看到ullHighResDiffTime = 639.因此,udDiffTime = 0.000639。但是,我得到了udDiffTime = 0。

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

5 个答案:

答案 0 :(得分:7)

你正在进行整数除法,因此如果结果是0.000639,它将被截断为0。

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

无符号长多头可以达到18,446,744,073,709,551,615。 double最高可以达到1.7E308(即一个有308个零的一个)。问题在于,值越高,精度越低,所以你需要问自己的是,大值是否真的需要精确,或者更重要的是这个数字的大小。

答案 1 :(得分:1)

将其更改为

double udDiffTime = ullHighResDiffTime / 1000000.0;

获得您期望的结果。

答案 2 :(得分:0)

unsigned long long是一个整数类型,因此使用积分除法。仅在除法之后将值转换为double。尝试除以1000000.0

答案 3 :(得分:0)

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

请改用:

double udDiffTime = ullHighResDiffTime / 1000000.0;

答案 4 :(得分:0)

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

将它除以双倍。