X가 무엇인지 알 수없는 경우 최악의 경우 일 수 있습니다.
int X = Integer.MAX_VALUE;
long aLong = X + 1;
결론 : 그래서, 최악의 경우 무엇 당신은 이클립스가 모든 것에 대해 경고하고 싶지 않아요.
당신이
long aLong = X * Y * Z; //you could write
long aLong = (long)X * Y * Z;
결론의 정수 오버 플로우 문제를 해결하려면 다음이 긴 오버 플로우 문제를 해결하지 않을 것이다. 당신이 그들을 수정하려는 경우 같은 코드를 작성해야 :
BigInteger tmp = BigInteger.valueOf(X).multiply(BigInteger.valueOf(Y)).multiply(BigInteger.valueOf(Z));
if(BigInteger.valueOf(Long.MAX_VALUE).compareTo(tmp)>=0){
long aLong = tmp.longValue();
}else{
System.out.println("Overflow");
}
을하지만 결과 값은 길이에 맞게 수있는 경우에만 확인합니다. 그러나 계산 중에 "오버플로"가 발생했는지 묻는 중입니다. 이것은 모든 계산 후에 이것을 확인해야 함을 의미합니다.
전체 소스 파일을 구문 분석하여이 파일을 찾는 Eclipse 용 도구를 작성하려면 다음을 수행하십시오. 그러나 그것은 쉽게 단지 전체를 많이가 다음과 같은 값을 기억하는 것입니다 :
이
/*11111111111111111111111111111111*/int Y = -1; //-1
/*11111111111111111111111111111111*/int QRY = (Y >> 1); //-1
/*11111111111111111111111111111110*/int QLY = (Y << 1); //-2
/*11111111111111111111111111111110*/int QLX = (X << 1); //-2
/*11000000000000000000000000000000*/int QRZ = (Z >> 1); //-1073741824
/*10000000000000000000000000000000*/int Z = Integer.MIN_VALUE; //-2147483648
/*01111111111111111111111111111111*/int X = Integer.MAX_VALUE; // 2147483647
/*00111111111111111111111111111111*/int QRX = (X >> 1); // 1073741823
/*00000000000000000000000000000000*/int QLZ = (Z << 1); // 0
그래서 당신은 어떤 산술 연산의 경고 싶어? a, x와 y가 같은 정수형 인 경우 a = x + y는 오버플로 할 수 있습니다. – Mark
같은 검사를하고 싶지만 곱셈 만하고 싶습니다. 나는 콘테스트 프로그래밍을하고 있는데 일반적으로 값은 최대 9^9이므로 추가는 문제가 아니지만 곱셈은 경고가되고 그렇지 않으면 나는 '1L * x * y' 트릭을 잊어 버린다. – Betlista