以下のコードを実行すると、いくつかのアンドロイド携帯電話で奇妙な問題が発生します。intを使用するといくつかのアンドロイド携帯電話で間違った答えが出る可能性があります
public void test(){
int num = 1;
for(int i=0;i<14;i++){
num = num+100000;
}
System.out.println("num "+num);
}
私は答え、「1400001」を期待するが、私はモトクロス2ndGen、Xiaomi3のような携帯電話上で間違った答え「200385」を取得し、小米科技注意など
奇妙なことは、私が得ることができるということです私はそれをデバッグ、または
public void test(){
int num = 1;
for(int i=0;i<14;i++){
num = num+100000;
System.out.println("num "+num);
}
}
または
public void test(){
int num1 = 1;
for(int i=0;i<14;i++){
num1 = num1+100000;
}
System.out.println("num1 "+num1);
int num2 = 1;
for(int i=0;i<14;i++){
num2 = num2+100000;
}
System.out.println("num2 "+num2);
}
のようなコードを複雑にしたい正解int
をlong
に設定するか、「100000」を100にすると、通常は正しい回答が得られます。では、この現象の背景にある理由は何ですか?整数オーバフロー? 補足: 間違った電話機のサイズを調べると32で、最大値は2147483647で、他のものと同じです。結果の1つが "131072"でオーバーフローし、バイナリが2^17です。間違った結果が4回目、8回目などの "for"コードで4倍になります。なぜですか?
intの代わりにlongデータ型を使用し、num変数を試す – siddhesh
longデータ型を使用するのが正しいです。私は整数についての理由を知りたい。 –
チェック・サイズ(バイト単位) – siddhesh