2013-03-13 61 views
1

爲什麼長打印的價值不能像我期望的那樣打印在下面的代碼片段中?爲什麼long long值打印不正確?

#include <stdio.h> 

int main() 
{ 
    int x = 1363177921; 
    long long unsigned y = x * 1000000; 
    printf("y: %llu\n", y); // Why is 1363177921000000 not printed? 
    return 0; 
} 
+1

您可以通過添加行「assert(y == 1363177921000000)」來隔離計算和打印; (這將失敗)在printf之前。 – 2013-03-13 11:43:26

回答

7

這不是印刷有問題。你必須在整數溢出:

long long unsigned y = x * 1000000; 

修改成:

long long unsigned y = x * 1000000ull; 
4

因爲你x不是long long,也不是1000000 - 它只是轉換爲long long的相乘後。

使它1000000ULL,你會得到你想要的。

1

問題是x是int並且1000000將會很長。現在,編譯器將它們相乘,因爲它是乘以2長,然後將結果轉換爲long long

爲了解決X前添加隱式類型轉換或100000 x轉換成很長很長的節目下面

#include <stdio.h> 

int main() 
{ 
     int x = 1363177921; 
     long long unsigned y = (long long)x * 1000000; 
     printf("y: %llu\n", y); // Why is 1363177921000000 not printed? 
     return 0; 
} 

http://codepad.org/rLW8fGTA

相關問題