作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] 關於變數數值的問題
時間Sun Oct 21 10:06:38 2007
※ 引述《Knossos (蒼天已死黃天當立)》之銘言:
: 首先,我用sizeof()的函數,找出long long int的大小為8,照理說,最大正數應該
: 可以儲存2^63-1,可是電腦卻只可以儲存2^31-1,這是為什麼呢?其他記憶體被吃掉了嗎
: 上面的問題牽扯到下面這個問題:
: #include <iostream>
: using namespace std;
: int main()
: {
: unsigned int a;
: unsigned int b;
: a = , b = 2147483647;
: //2 ^ 32 = 2147483648
: cout << a*b << endl;
: system("pause");
: return 0;
: }
: 我現在操控a的數值來影響a*b的結果。我發現,當a=1 or 2時,結果是正確的,螢幕
: 上顯示我要的結果。可是當a>3後,乘積卻始終不正確。
: 如果說是因為兩個的乘積超過unsigned int的記憶體容量,那為什麼乘以2時會對?
: 還是說,兩個unsigned int的四則運算,最多只能顯示出最大正數的兩倍?
: 這個問題該如何解決?
UINT_MAX = 2^32 - 1 = 4294967295
2147483648 = 2^31
Because a is an unsigned, and b is an unsigned,
a*b will also be an unsigned int.
So the max value of a*b will be 2^32-1.
So when a = 3, it overflows and will be truncated.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.134.53
1F:→ Knossos:啊~我搞錯了...sorry! 那上一個問題,long long int呢? 10/21 20:30