Menyingkap Misteri Nilai & 0xff di Java: Unsigned Fun and Byte Promotion
Jenis data bait Java, direka bentuk sebagai 8- bertanda jenis bit, kadangkala boleh meninggalkan pengaturcara menggaru kepala mereka. Pertimbangkan kod yang membingungkan:
<code class="java">byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned) int result = value & 0xff;</code>
Apabila dicetak, hasil secara ajaib berubah menjadi 254. Bagaimanakah penjelmaan integer secara tiba-tiba ini berlaku, dan mengapa bitwise & operator nampaknya berada di tengah-tengah semuanya?
Pada hakikatnya, & operator itu sendiri tidak menghasut sebarang penukaran jenis. Ia melaksanakan tugas yang dimaksudkan dengan patuh: menjalankan operasi AND bitwise pada dua integer. Silap mata terletak pada interaksi halus peraturan penghantaran jenis data Java.
Apabila nilai, pembolehubah bait, menemui &, ia mengalami penukaran kepada integer. Metamorfosis ini berpunca daripada keperluan ketat Java bahawa operator & beroperasi secara eksklusif pada integer. Akibatnya, nilai secara senyap-senyap dinaikkan kepada int sebelum gimnastik bitwise bermula.
Menariknya, operan lain, 0xff, sememangnya int literal. Akibatnya, kedua-dua operan berpuas hati menari dalam alam integer.
Operand & melakukan keajaibannya, menghasilkan hasil integer baharu yang merangkumi nilai 8-bit yang tidak ditandatangani yang diekstrak daripada nilai bait asal. Dalam kes kami, perwakilan 0xfe yang tidak ditandatangani menghasilkan 254.
Oleh itu, hasil enigmatik = nilai & 0xff menjadi penetapan yang wajar bagi nilai 8-bit yang tidak ditandatangani kepada hasil integer bernama. Memahami gelagat promosi jenis halus ini memberi kuasa kepada pengaturcara untuk menavigasi selok-belok jenis data Java yang pelbagai, memastikan kod mereka mengendalikan nuansa penghantaran dan manipulasi bitwise dengan anggun.
Atas ialah kandungan terperinci Bagaimanakah Bitwise DAN dengan 0xff Mengubah Bait yang Ditandatangani menjadi Integer Tidak Ditandatangani di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!