Rumah > Java > javaTutorial > teks badan

Mengapakah `value & 0xff` menghasilkan nilai yang tidak ditandatangani dalam Java, walaupun `value` ialah bait yang ditandatangani?

DDD
Lepaskan: 2024-11-02 02:45:02
asal
520 orang telah melayarinya

Why does `value & 0xff` produce an unsigned value in Java, even though `value` is a signed byte?

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>
Salin selepas log masuk

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:

  • nilai dinaikkan kepada -2 (11111110 dalam binari)
  • 0xff mewakili 255 (11111111 dalam binari)
  • nilai & 0xff dengan itu menghasilkan 254 (11111110 dalam binari)

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!