3
class kk{
    public static void main(String args[]){
        int n=0;
        for (byte i = 0; i<=255; i++) 
        { 
             n++;
        }
        System.out.println(n);
    }
}

上記の for ループは無限に続きます。誰かが理由を答えていただければ幸いです。

4

3 に答える 3

9

Java の数値はデフォルトでsignedであるためです。

したがって、 aは、ループの条件を常に満たす範囲である range にbyte値を保持します。いつでも、追加して に変えます。[-128, 127]fori == 1271i-128

于 2013-02-07T23:31:59.867 に答える
4

これ

for (byte i = 0; i<=255; i++)

iは常に になるため、無限ループ<= 255です。

Javabyteは署名されているため、値の範囲は-2^8(is -128) から(2^8)-1(is 127) です。

一度iは 127 ですが、1 を追加すると -128 になり、これは明らかに よりも小さくなり255ます。したがって、このループは永遠に実行されます。

于 2013-02-07T23:32:58.810 に答える
2

バイト値は の範囲にあるためです[-128, 127]

したがって、バイト 127 がインクリメントされると、オーバーフローして -128 になり、ループが無限に続きます。

于 2013-02-07T23:32:42.353 に答える