1024 * 1024 * 1024 * 1024
ve 2147483648
Java'da aynı değere sahip değildir.
Aslında, Java'da 2147483648
DEĞER DEĞİLDİR (olmasına rağmen 2147483648L
). Derleyici tam olarak ne olduğunu veya nasıl kullanılacağını bilmiyor. Yani şaraplar.
1024
Java'da geçerli bir int ve geçerli int
başka bir geçerli ile çarpılır int
, her zaman geçerlidir int
. Sezgisel olarak beklediğiniz aynı değer olmasa bile, hesaplama taşacak.
Misal
Aşağıdaki kod örneğini düşünün:
public static void main(String[] args) {
int a = 1024;
int b = a * a * a * a;
}
Bunun bir derleme hatası oluşturmasını bekler misiniz? Şimdi biraz daha kayganlaşıyor.
Ya 3 yinelemeli bir döngü koyar ve döngüde çoğalırsak?
Derleyicinin optimizasyonuna izin verilir, ancak programın davranışını değiştiremez.
Bu davanın nasıl ele alındığına dair bazı bilgiler:
Java ve diğer birçok dilde, tamsayılar sabit sayıda bitten oluşur. Verilen bit sayısına uymayan hesaplamalar taşacaktır ; hesaplama temelde Java'da 2 ^ 32 modülüdür , bundan sonra değer işaretli bir tamsayıya dönüştürülür .
Diğer diller veya API'ler dinamik sayıda bit kullanır ( BigInteger
Java'da), bir istisna oluşturur veya değeri sayı değil gibi sihirli bir değere ayarlar.