SORU
8 HAZİRAN 2010, Salı


Nasıl Java tamsayı underflows ve taşmaları tanıtıcı ve nasıl kontrol eder misiniz?

Nasıl Java tamsayı underflows ve taşmaları ele?

Bu lider, bu nasıl oluştuğunu/test kontrol eder misiniz?

CEVAP
8 HAZİRAN 2010, Salı


Eğer taşarsa, geri minimum value gider ve oradan devam ediyor. Eğer underflows, geri maximum value gider ve oradan devam ediyor.

Aşağıdaki gibi önceden kontrol edebilirsiniz

public static boolean willAdditionOverflow(int left, int right) {
    if (right < 0 && right != Integer.MIN_VALUE) {
        return willSubtractionOverflow(left, -right);
    } else {
        return (~(left ^ right) & (left ^ (left   right))) < 0;
    }
}

public static boolean willSubtractionOverflow(int left, int right) {
    if (right < 0) {
        return willAdditionOverflow(left, -right);
    } else {
        return ((left ^ right) & (left ^ (left - right))) < 0;
    }
}

(long int long aynı denetimleri gerçekleştirmek için yerine kullanabilirsiniz)

Eğer bu çok sık ortaya çıkabilir düşünüyorsanız, o zaman bir türünü kullanarak düşünün ya da daha büyük değerler deposu olan nesne long örneğin, ya da belki de java.math.BigInteger. En son, neredeyse taşma yok, mevcut JVM bellek sınırı.


Eğer zaten Java8 olacak olursan, o zaman taşması ArithmeticException atmak Math#addExact() Math#subtractExact() yeni yöntemlerden yararlanabilirler.

public static boolean willAdditionOverflow(int left, int right) {
    try {
        Math.addExact(left, right);
        return false;
    } catch (ArithmeticException e) {
        return true;
    }
}

public static boolean willSubtractionOverflow(int left, int right) {
    try {
        Math.subtractExact(left, right);
        return false;
    } catch (ArithmeticException e) {
        return true;
    }
}

Kaynak kodu here here sırasıyla bulunabilir.

Tabii ki, aynı zamanda hemen boolean yardımcı bir yöntem onları saklamak yerine kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • engineerguy

    engineerguy

    10 Ocak 2010
  • girleffect

    girleffect

    20 Mayıs 2008
  • TheSalband Rai

    TheSalband R

    11 NİSAN 2011