Rumah >Java >javaTutorial >Mengapa menambahkan 'L' pada nilai berangka di Jawa secara drastik mengubah hasil operasi pendaraban?

Mengapa menambahkan 'L' pada nilai berangka di Jawa secara drastik mengubah hasil operasi pendaraban?

Patricia Arquette
Patricia Arquetteasal
2024-11-07 04:43:02432semak imbas

Why does adding an

Memahami Percanggahan Nilai Berangka

Dalam coretan kod yang disediakan, percanggahan ketara antara kedua-dua operasi pendaraban berpunca daripada ketiadaan atau kehadiran aksara "L" dilampirkan pada nilai berangka:

long oneYearWithL = 1000*60*60*24*365L;
long oneYearWithoutL = 1000*60*60*24*365;

Melampirkan "L" untuk Memastikan Nilai Panjang

Dalam ungkapan pertama, akhiran "L" menandakan literal integer panjang, menunjukkan bahawa nilai itu harus dianggap sebagai integer 64-bit. Hasil pendaraban ini ialah nilai panjang 31536000000 milisaat setahun.

Ketiadaan Keputusan "L" dalam Nilai Integer

Dalam ungkapan kedua, tanpa " L", operasi pendaraban menghasilkan nilai integer. Dalam kes ini, hasilnya ialah 1471228928 apabila nilai jangkaan sepatutnya melebihi 3 bilion milisaat.

Limpahan Integer dan Pemangkasan

Percanggahan berlaku kerana hasil darab empat Integer 32-bit (1000, 60, 60, dan 24) dengan integer 32-bit kelima (365) melebihi julat integer, iaitu [-2^31, 2^31-1]. Hasilnya membungkus, menghasilkan nilai 1471228928 yang salah dalam ungkapan kedua.

Penukaran kepada Perwakilan Pelengkap 2

Jika tiada akhiran "L", jika hasil pendaraban integer adalah negatif dan melebihi julat integer, ia ditukar kepada perwakilan pelengkap 2 sebelum ditugaskan kepada pembolehubah integer. Penukaran ini memastikan bahawa nilai negatif boleh diwakili dalam julat integer.

Memastikan Keputusan yang Betul

Untuk mendapatkan hasil yang betul, adalah penting untuk mengisytiharkan nilai berangka yang melebihi julat integer sebagai nilai panjang dengan menambahkan "L" untuk memastikan perwakilan yang betul dan mengelakkan pemotongan atau penukaran kepada perwakilan pelengkap 2.

Atas ialah kandungan terperinci Mengapa menambahkan 'L' pada nilai berangka di Jawa secara drastik mengubah hasil operasi pendaraban?. 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