看板 EE_DSnP 關於我們 聯絡資訊
※ 引述《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
Knossos:啊~我搞錯了...sorry! 那上一個問題,long long int呢? 10/21 20:30