Rumah >Java >javaTutorial >Mengapa Kod Java Saya Gagal dengan Limpahan Integer Apabila Cuba Mencari Faktor Utama 600851475143?

Mengapa Kod Java Saya Gagal dengan Limpahan Integer Apabila Cuba Mencari Faktor Utama 600851475143?

Patricia Arquette
Patricia Arquetteasal
2024-11-08 14:53:02907semak imbas

Why Does My Java Code Fail with an Integer Overflow When Trying to Find Prime Factors of 600851475143?

Limpahan Integer dengan Nombor Besar

Coretan kod di atas cuba mencari faktor perdana terbesar bagi integer tertentu, 600851475143. Walau bagaimanapun, apabila kod dijalankan, ia gagal dengan mesej ralat yang menunjukkan bahawa integer juga besar.

Apabila bekerja dengan nombor yang besar di Java, adalah penting untuk mengambil kira jenis data yang tersedia dan hadnya.

Integer

Integer dalam Java diwakili menggunakan nilai lebar tetap. Integer 32-bit (jenis int) boleh memegang nilai dari -2^31 hingga 2^31-1 (kira-kira -2 bilion hingga 2 bilion). Integer 64-bit (jenis panjang) boleh memegang nilai dari -2^63 hingga 2^63-1 (kira-kira -9 quintillion hingga 9 quintillion).

Dalam kod contoh, nombor yang diberikan, 600851475143, melebihi julat integer 32-bit. Akibatnya, Java mentafsir nilai literal sebagai integer 32-bit dan tersalah memotongnya kepada nilai negatif, yang membawa kepada ralat limpahan.

Huruf Panjang

Untuk menentukan nilai literal sebagai integer 64-bit, ia mesti diakhiri dengan "L". Contohnya, 600851475143L ialah perwakilan yang sah bagi nombor yang diingini dalam Java.

Kod Disemak

Dengan menukar nilai literal kepada 600851475143L, kami boleh membetulkan isu limpahan dan berjaya melaksanakan program ini.

...
        obj.function(600851475143L);
...

Atas ialah kandungan terperinci Mengapa Kod Java Saya Gagal dengan Limpahan Integer Apabila Cuba Mencari Faktor Utama 600851475143?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn