Rumah  >  Artikel  >  Java  >  Mengapakah coretan kod \"nilai bait = 0xfe; hasil int = nilai & 0xff;\" menghasilkan nilai 254?

Mengapakah coretan kod \"nilai bait = 0xfe; hasil int = nilai & 0xff;\" menghasilkan nilai 254?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 12:30:28807semak imbas

Why does the code snippet

Memahami Operasi Bitwise: Membongkar nilai & 0xff dalam Java

Persoalan timbul daripada coretan kod Java yang melakukan operasi bitwise menggunakan & operator:

<code class="java">byte value = 0xfe;
int result = value & 0xff;</code>

Operasi ini nampaknya menghasilkan nilai 254 apabila dicetak. Walau bagaimanapun, memahami cara ini berfungsi memerlukan mendalami selok-belok jenis data dan operasi bitwise dalam Java.

Operasi Bitwise dan Promosi Data

Operator & dalam Java berprestasi operasi DAN bitwise, di mana setiap bit dalam hasilnya ditetapkan kepada 1 jika kedua-dua bit yang sepadan dalam operan ialah 1, dan 0 sebaliknya. Biasanya, operasi ini menghasilkan nilai jenis yang sama seperti operannya.

Dalam coretan kod, nilai ialah bait, iaitu integer bertanda 8-bit. Nilai 0xfe sepadan dengan -2 dalam perwakilan ditandatangani dan 254 dalam perwakilan tidak ditandatangani. Operan lain, 0xff, ialah literal int yang mewakili 255 yang tidak ditandatangani.

Walau bagaimanapun, operator & ditakrifkan untuk beroperasi hanya pada nilai int. Oleh itu, nilai dinaikkan dahulu kepada int (ff ff ff fe) sebelum operasi dilakukan.

Menyingkap Keputusan

Operasi & kemudiannya digunakan antara nilai digalakkan dan int literal 0xff (00 00 00 ff), menghasilkan nilai 00 00 00 fe. Ini sepadan dengan 254 dalam perwakilan tidak ditandatangani, yang dicetak sebagai hasilnya.

Ringkasnya, nilai ungkapan & 0xff menetapkan hasil kepada nilai tidak ditandatangani hasil daripada meletakkan 8 bit nilai dalam 8 bit terendah hasil . Ini perlu kerana bait ialah jenis yang ditandatangani dalam Java dan penukaran terus daripada bait kepada int akan menghasilkan perwakilan yang ditandatangani yang salah.

Atas ialah kandungan terperinci Mengapakah coretan kod \"nilai bait = 0xfe; hasil int = nilai & 0xff;\" menghasilkan nilai 254?. 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