Menyingkap Misteri nilai & 0xff dalam Java
Di Java, operator & melakukan operasi bitwise DAN pada dua integer, menghasilkan integer baharu. Walau bagaimanapun, apabila satu operan adalah daripada jenis bait, fenomena yang menarik berlaku.
Pertimbangkan kod berikut:
<code class="java">byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned) int result = value & 0xff;</code>
Apabila hasil cetakan, anda mendapat 254 (tidak ditandatangani) secara mengejutkan, melanggar jangkaan. Untuk memahami tingkah laku ini, kita mesti menyelidiki nuansa sistem jenis Java.
Di Java, bait ialah jenis bertanda, bermakna ia boleh mewakili nilai positif dan negatif. Walau bagaimanapun, apabila ia dinaikkan kepada integer, ia dianggap sebagai nilai tidak bertanda. Apabila operator & digunakan pada nilai (dinaikkan taraf kepada integer) dan pemalar 0xff (iaitu integer tidak bertanda literal), hasilnya ialah integer tidak bertanda yang mengandungi 8 bit terendah nilai digalakkan.
Dalam lain perkataan, hasil akan mempunyai perwakilan binari yang sama seperti nilai, dengan semua bit di atas bit ke-8 dikosongkan kepada 0. Ini secara berkesan menetapkan keputusan kepada nilai tidak bertanda yang diperoleh dengan membuang bit tanda daripada nilai.
Oleh itu, nilai & 0xff menyediakan teknik untuk menukar bait bertandatangan kepada integer tidak bertanda, mengekalkan nilai 8-bit asal. Ini selalunya berguna apabila bekerja dengan data di mana bit tanda tidak berkaitan atau diingini.
Atas ialah kandungan terperinci Mengapakah `value & 0xff` mengembalikan integer yang tidak ditandatangani dalam Java apabila `value` ialah bait?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!