Manipulasi Bitwise dengan Nilai & 0xff dalam Java
Dalam coretan kod Java ini:
<code class="java">byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned) int result = value & 0xff;</code>
soalan timbul : mengapa operasi DAN bitwise (&) antara nilai dan 0xff menghasilkan hasil 254 (tidak ditandatangani) dan bukannya -2 (ditandatangani) seperti yang dijangkakan?
Tidak seperti C, bait ialah jenis bertanda dalam Java. Menetapkan nilai kepada int tanpa manipulasi bitwise akan menghasilkan nilai yang ditandatangani -2. Walau bagaimanapun, menggunakan & dengan 0xff mencapai nilai tidak ditandatangani yang dimaksudkan.
Kunci di sini ialah & beroperasi pada nilai int. Apabila nilai (a byte) digunakan dengan &, ia mula-mula dinaikkan pangkat kepada int. Begitu juga, 0xff ialah int literal. Operasi & kemudiannya menghasilkan nilai perduaan 8-bit daripada nilai yang diletakkan dalam 8 bit hasil yang paling tidak ketara.
Dalam contoh ini:
Manipulasi bitwise yang biasa digunakan ini untuk mengekstrak bit tertentu atau mengekalkan sifat nilai yang tidak ditandatangani, terutamanya dalam pengaturcaraan peringkat rendah atau senario manipulasi data.
Atas ialah kandungan terperinci Mengapakah `value & 0xff` menghasilkan nilai yang tidak ditandatangani dalam Java, walaupun `value` ialah bait yang ditandatangani?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!