class kk{
public static void main(String args[]){
int n=0;
for (byte i = 0; i<=255; i++)
{
n++;
}
System.out.println(n);
}
}
上記の for ループは無限に続きます。誰かが理由を答えていただければ幸いです。
class kk{
public static void main(String args[]){
int n=0;
for (byte i = 0; i<=255; i++)
{
n++;
}
System.out.println(n);
}
}
上記の for ループは無限に続きます。誰かが理由を答えていただければ幸いです。
Java の数値はデフォルトでsignedであるためです。
したがって、 aは、ループの条件を常に満たす範囲である range にbyte
値を保持します。いつでも、追加して に変えます。[-128, 127]
for
i == 127
1
i
-128
これ
for (byte i = 0; i<=255; i++)
i
は常に になるため、無限ループ<= 255
です。
Javabyte
は署名されているため、値の範囲は-2^8
(is -128) から(2^8)-1
(is 127) です。
一度i
は 127 ですが、1 を追加すると -128 になり、これは明らかに よりも小さくなり255
ます。したがって、このループは永遠に実行されます。
[-128, 127]
。したがって、バイト 127 がインクリメントされると、オーバーフローして -128 になり、ループが無限に続きます。