奇数和为什么是负数(java初学)

package com.Damon_;


public class Parity {

public static void main(String[] args){

java.util.Scanner sco = new java.util.Scanner(System.in);

int temp=sco.nextInt();

int num=1,sum1=0,sum2=0;

do{

   if(num%2==0){

   sum1=sum1+num;

   num++;

   }

   else{

    sum2=sum2+num;

   num++;

   }

}

while(num<=temp);

System.out.println(temp+"以内偶数和为"+sum1+"\n"+temp+"以内奇数和为"+sum2);

}

}

无聊给temp赋值了个987654321,结果:

987654321以内偶数和为2087916184

987654321以内奇数和为-1713223951

为什么奇数和是负数?

498746313 结果:

498746313以内偶数和为-2029931276

498746313以内奇数和为-1780558119

都是负数。

小一点的数好像都不会出现问题

Damon_
浏览 1646回答 1
1回答

Coda

你计算的数据已经int溢出了。int 类型能够表示的最大值为 2的31次方-1 的常量。  int 类型能够表示的最小值为 -2的31次方 的常量。在计算机中用二进制表示所有的信息,这个符号的区别就看首位。首位如果是 0,就是正的,1 就是负的。数值溢出就会出现这个现象。Java 中的 int 总共就 32 位,正数上限的情况首位也只能是 0,其他位都可以是 1(就是 2^31-1 的情况)。但是如果正数过大了,例如 2^31,计算机把首位变成 1,把它按照正常的方式输出了,于是就成了负的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java