2019年5月3日 星期五

為什麼是2147483647?


2147483647?

1. 單隻角色的最大傷害值是這個數
2. BOSS的最大HP數值也是這個數

到底這個數字是在做什麼的呢?

2147483647
-是2的31次方減1
-如果是2進制來表示,也就是1111111111111111111111111111111 (31個1)
-也意味著是32BIT系統的最大數值
-因為目前很多手機還是採用32BIT,所以這種算法就是PAD遊戲中的最大數值
-如果超過這個數字,就會出現嚴重的BUG,因此,開發團隊就會這個數字鎖起來
-所以大家看到最大的HP數值,最高的傷害數值,也就是 2147483647



-數學上,2147483647 是第8個 Mersenne prime
-要成為 Mersenne prime,條件就有2:一是質數,二是該數是2的N次方減1



-有一個很經典的BUG,也是類似這樣的
-就是食鬼的第256關
-因為食鬼是8BIT遊戲,所以最大數值就是255
-一旦超過255,也即是到了第256關,就會出現溢出問題(關卡是以水果顯示)
-也即是這樣:

21 則留言:

  1. 意味着pad的boss最大hp不能超過這個數?

    回覆刪除
    回覆
    1. 我想想應該唔會
      21億輸出只係計一隻角色既單屬性, 如果一隊六隻再加主副屬性, 最大傷害應該係21億x12

      刪除
  2. Lv 9 隻boss 30億血啦ching 你未打過未岩岩玩

    回覆刪除
    回覆
    1. 果隻21億血, 何來30?

      刪除
    2. 我印象中真係三十億 無記錯嘅話

      刪除
    3. 滿血狀態下用宙赫壓落去扣966367642,再用轉宙壓扣751619277,點計都唔會係卅億

      刪除
  3. 戰友網30億係錯?

    回覆刪除
    回覆
    1. 戰友網成日都錯架啦

      刪除
    2. 睇重力傷害就知道,係2147483647血

      刪除
  4. 戰友網成日錯架啦 好似今次杯賽米斯5億防佢寫24 信佢你死左10萬年 仲要錯左都唔改 關卡血量呢D攻略睇日本網好D

    回覆刪除
  5. 明明係30億, 咪撚9吹21億

    回覆刪除
    回覆
    1. 你識條鐵咩,唔撚識程式啲野又係度亂吠

      刪除
  6. 係30億呀屌你老味盲撚咗?

    回覆刪除
    回覆
    1. 唔係人地盲 係你腦有問題 睇下人地重力打LV9 D片啦 人地宙赫45%重力打966367642 除番45%你睇下幾多 仲話30億 數學都未學好走出黎柒

      刪除
  7. 有啲垃圾想吠兩聲咪由佢囉,有啲人現實生活好慘架

    回覆刪除
  8. 點解食鬼8bit max值係(2^8)-1
    但係PAD 32bit max值係(2^31)-1 而唔係(2^32)-1???

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 師兄你將三種signed integer撈亂晒
      最常見果種係負數=正數既bit反轉之後+1,你所講既二補數
      -9係
      1111 1111 1111 1111 1111 1111 1111 0111

      -2147483648係
      1000 0000 0000 0000 0000 0000 0000 0000

      -2147483647係
      1000 0000 0000 0000 0000 0000 0000 0001

      另一種係直接反黎用,好似叫一補數
      全0=0
      全1=-0
      1111 1111...1110=-1
      呢種最細既負數係-2147483647

      仲有種係淨係將最左邊個bit轉1
      全0=0
      1000 0000...=-0
      全1=-2147483647

      刪除
    3. 為錯誤資訊抱歉,有一段時間無接觸,有少許東西記錯,感謝師兄糾正,以下是補正資訊,
      32bit系統是用2”s complmenet,
      正如上方師兄所說,integer有三類,
      一種是以第1 bit做正負數做的signed value,
      第二是1”s complement(一補數),正正是1及0反轉代表同數值的負數,
      第三種是2”s complement(二補數),負數是反轉bit後加1來表示同值負數(除0及-2147483648為特別例子)
      電腦使用2’s complement的原因係,電腦在做減數時,將要減的數看作成負數做加法,在overflow下,溢出的第33位bit省略就能得出所需數值的32位2進制,
      因此,所有32bit遊戲需於2147483647做一個計算Logic的鎖定,否則數值再加下去,會被溢出由-2147483648起重新計算上去

      最後,食鬼的8bit遊戲,數值上無負數的協定,因此只使用無定向數值(unsigned number)來表示數值
      因此最大數是255

      再一次為之前的post說聲抱歉

      刪除
  9. 想多過21億 好簡單
    加盾就可以了
    21億+99%盾變40億都仲得

    回覆刪除
  10. You can set HP as char to prevent the question of overflow

    回覆刪除