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!