Rumah  >  Artikel  >  Java  >  Mengapakah \'nilai & 0xff\' Menukar Bait Java kepada Integer Tidak Ditandatangani?

Mengapakah \'nilai & 0xff\' Menukar Bait Java kepada Integer Tidak Ditandatangani?

Barbara Streisand
Barbara Streisandasal
2024-11-01 20:39:29335semak imbas

Why Does

Memahami Kes Ingin tahu "nilai & 0xff" dalam Java

Di Java, operator bitwise AND "&" yang biasa digunakan melakukan operasi bitwise pada dua integer, menghasilkan nilai integer. Walau bagaimanapun, apabila digunakan pada bait, seperti dalam pertanyaan "nilai & 0xff," ia menghasilkan hasil integer, menyebabkan ramai yang bingung.

Untuk membongkar misteri ini, mari kita mendalami asas jenis data bait Java. Tidak seperti jenis berangka lain, bait ditandatangani, bermakna ia boleh mewakili kedua-dua nombor positif dan negatif. Perbezaan ini menjadi penting apabila melakukan operasi bitwise.

Dalam kod yang diberikan, "value & 0xff" pada asasnya menukar "value" bait yang ditandatangani kepada "hasil" integer yang tidak ditandatangani dengan menggunakan operasi bitwise AND dengan literal heksadesimal 0xff (255). Operasi ini memastikan bahawa hanya 8 bit "nilai" yang paling rendah dikekalkan dalam "hasil", dengan berkesan mengalih keluar sebarang sambungan tanda negatif.

Keperluan untuk transformasi sedemikian berpunca daripada fakta bahawa "nilai" adalah tanda tanda bait, manakala pengendali "&" memerlukan operan integer. "Nilai" bait secara automatik dinaikkan kepada int semasa operasi, menghasilkan integer bertanda 32-bit. Akibatnya, operasi "&" dilakukan pada nilai int yang digalakkan dan hasilnya ditukar kembali kepada int, mengekalkan 8 bit paling tidak ketara bagi bait asal.

Untuk menggambarkan, jika "nilai" mempunyai perwakilan binari 11111110 (mewakili -2 sebagai bait bertanda), operasi "nilai & 0xff" akan menghasilkan 11111110 (tidak ditandatangani) sebagai hasilnya. Ini kerana literal heksadesimal 0xff mempunyai perwakilan binari 11111111, dan bitwise AND daripada kedua-dua nilai ini dengan berkesan menetapkan semua bit kecuali 8 bit paling tidak bererti kepada 0.

Atas ialah kandungan terperinci Mengapakah \'nilai & 0xff\' Menukar Bait Java kepada Integer Tidak Ditandatangani?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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