2011-06-29 93 views
3

當前試圖用一個靜態值來分隔無符號long long。劃分無符號long long

unsigned long long包含完成操作所需的微秒數。我想取這個值並將其轉換爲秒。

下面是代碼片段:

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

在一種情況下,用我的調試器,我可以看到ullHighResDiffTime = 639.因此,udDiffTime = 0.000639。然而,我越來越udDiffTime = 0.

我敢肯定我犯了一個錯誤的地方。我試過使用1000000LL而不是使用(無符號long long)來鑄造它,但沒有區別。

回答

7

你做的整數除法,因此,如果結果是0.000639,將被截斷爲0

如果你想要一個浮點結果,你必須使用至少一個浮點操作數。嘗試將(unsigned long long) 1000000更改爲1000000.0

無符號長整數的範圍可以達到18,446,744,073,709,551,615。 A double可以達到1.7E308(即,具有308個零的一個)。值得注意的是值越高,精度就越低,所以你需要問自己的是,如果大數值真的需要精確的話,或者數值的大小更重要。

1

將其更改爲

double udDiffTime = ullHighResDiffTime/1000000.0; 

得到你所期望的結果。

0

unsigned long long是一個整數類型,所以使用整數除法。只有在劃分之後,該值才轉換爲double。嘗試除以1000000.0

0

如果ullHighResDiffTime的類型爲無符號長整型,那麼您將整數除以整數,不會調用浮點算術。

使用此來代替:

double udDiffTime = ullHighResDiffTime/1000000.0;

0

除以無符號長長(或任何整數)與同一類型的相同類型的結果。然後您將該值轉換爲double,但結果已爲零。

用雙分號。