public class c { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i = 0;;i++){
if(i==-10) System.out.println(i);
if(i==10) System.out.println(i);
if(i==1000*1000*5) System.out.println(i);
if(i==-1) break;

}
}}

解决方案 »

  1.   

    0x7FFFFFF + 1 = 0x80000000 这个是-2的31次方,再增加会输出-10
      

  2.   

    和补码什么的有关吧。java的int型4个字节,32位,最高位为符号位。存储整数是以补码的形式存的,正数的补码就是本身,负数的补码是反码+1。
    i从0开始,加啊加的,就变成01111...1(2进制),这时候再+1,就溢出,变成10000000 ...00,这个是一个负数的补码,而且负了很多(好想是-2147483648的补码)然后慢慢加1,终于上升到-10的补码,最后再上升变成-1,退出循环了。
      

  3.   

    结果是
    10
    5000000
    -10
     这个是因为for循环没有 进入条件判断,直接就进入了
    而到了里面之后呢
    初始值为0 每个都不相等
    执行迭代部分,也就是i++
    之后再直接进入
    如此循环,每次加1
    到了第11轮的时候,i=10了 就会执行后面那条语句,输出10
    之后再进入i++ 比较的过程,
    等i=1000*1000*5的时候,再输出后面语句,输出5000000
    之后呢又是i++ 进入比较每个if的过程
    等到到了int类型的最大值得时候,大概20多亿,具体多少忘了,再加的话就会变成一个非常小的负数,
    然后负数每次加一,执行20多亿次,
    就等于-10 了,输出后面的语句,也就是-10
    然后 再i++ 比较 
    9次之后,等于-1 执行后面的语句break;
    跳出for循环大体就是这个样子了,这只是一个过程,也许有的地方你不懂,但我相信随着你的继续学习,一定会自己理解的,写的不好的地方呢,也请谅解
      

  4.   

    溢出了,Int  是32位,正数最高到  2147483647当循环到达 2147483647继续累积,符号位由0变1 (溢出) 变为负数。
     当累加到 -10的时候 输出。