int型的最大值有多大?

首先討論這個有意義嗎?
我想沒有。

有意思嗎?
很有意思。

為什么沒有意義?

  • 因為這個東西是人定義的,一些老機子上int型是2個字節,現在大多數是4個字節32位,數據范圍為-2147483648 ~ 2147483647[-2^31 ~ 2^31-1]
  • 可以自行查看自己的機子int型是幾個字節
#include <stdio.h>

int main()
{
    printf("%d ",sizeof(int));
    return 0;
}

為什么有意思?

因為我們可以自己試出來,思路如下:

  • 定義 int a=1;
  • 在1后邊不斷加0,直到打印a出現亂的數字
  • 得到一個不亂的10^n形式的最大值1000000000
  • 再從最高位開始試,每位可以從0到9試一下(最高位從1到9),超出范圍,就取未超范圍的最大值更新一下a的值
  • 當然用二分法更好,但我認為10以內的用二分寫程序用牛刀了
  • 計算機如何判斷是否超出范圍呢?
    • 這遠沒我想象的簡單,因為超出范圍得出的數并不是隨機數,如2000000000+2000000000超出了范圍,你又減取2000000000,結果還是2000000000。
    • 我的想法是除去最高位加一次,得到的值與直接相加的結果一定位數相比較。不過這個方法優缺點,存在很小的意外情況。

我為啥閑得蛋疼研究這個?

  • 因為我玩爐石的時候周卓加翻倍翻了29次我的周卓居然死了。(周卓本身4血翻倍29次應該是2的31次方,而int型最大值是2^31-1)
  • 看來爐石隨從的血量,生命值啥的是用int型的變量存儲的。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容