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]fori == 1271i-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 になり、ループが無限に続きます。