爲什麼長打印的價值不能像我期望的那樣打印在下面的代碼片段中?爲什麼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;
}
爲什麼長打印的價值不能像我期望的那樣打印在下面的代碼片段中?爲什麼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;
}
這不是印刷有問題。你必須在整數溢出:
long long unsigned y = x * 1000000;
修改成:
long long unsigned y = x * 1000000ull;
因爲你x
不是long long
,也不是1000000
- 它只是轉換爲long long
的相乘後。
使它1000000ULL
,你會得到你想要的。
問題是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;
}
您可以通過添加行「assert(y == 1363177921000000)」來隔離計算和打印; (這將失敗)在printf之前。 – 2013-03-13 11:43:26