2014-01-21 58 views
-1
static int fn = 0; 
static int sn = 0; 
static boolean running = false; 
public static void run() 
{ 
    while (running == true) 
    { 
     fn = numbers[0]; 
     sn = numbers[1];    
     if (sign == 0) 
     { 
      input.setText(String.valueOf(fn)); 
     } 
    } 
} 
static class one implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     if (Display.sign == 0) 
     { 
      Display.numbers[0] = Display.numbers[0] *10; 
      Display.numbers[0] = Display.numbers[0] +1; 
     } 
    } 
} 

這對我編程計算器的代碼(不是全部,當然)。這是我在屏幕上顯示號碼的部分,但奇怪的是,這個程序一直運行到10個字符,所以我得到程序顯示1111111111我想再次做它,它給了我這個奇怪的號碼-1773790777 。我很困惑這個程序是如何產生的。正如你所看到的,上面的Display.numbers[]是我存儲兩個數字的數組。因此,爲了遍歷一個地方,我將數組中的數字乘以10,然後加1.因此,這怎麼會給我一個負數我能做些什麼來解決這個問題? 謝謝!發生時,我採取了一些有趣的事情,乘以10,然後加1

+7

基礎。 –

+0

好吧,這是否意味着我需要使用浮點數或雙精度? – Mikhail

+0

奧耶欣賞倒票。 – Mikhail

回答

0

這四溢。 1111111111 * 10 + 1 = 11111111111這是十六進制的0x2964619C7。溢出的結果將是不確定的,但在大多數現代實現這將是結果11111111111國防部的低位2 = 2521176519 = 0x964619C7這是32位2的補碼整數-1,773,790,777,這就是爲什麼你看到的數字。你應該多看二元,這是對整數溢出來了時下電腦

相關問題