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!