Memahami Nilai & 0xff di Java

1. Gambaran keseluruhan

0xff adalah nombor yang ditunjukkan dalam sistem angka heksadesimal (asas 16). Ia terdiri daripada duanombor F dalam hex. Seperti yang kita ketahui, F dalam hex bersamaan dengan 1111 dalam sistem angka binari. Jadi, 0xff dalam binari adalah 11111111.

Dalam artikel ini, kami akan mengetahui cara menggunakan nilai 0xff . Sebagai tambahan, kita akan melihat bagaimana merepresentasikannya menggunakan pelbagai jenis data dan bagaimana menggunakannya dengan & operator. Akhirnya, kami akan mengkaji beberapa faedah yang berkaitan dengan menggunakannya.

2. Mewakili 0xff Dengan Jenis Data Yang Berbeza

Java membolehkan kita menentukan angka yang ditafsirkan sebagai hex (asas 16) dengan menggunakan awalan 0x , diikuti oleh literal integer.

Nilai 0xff bersamaan dengan 255 dalam perpuluhan tanpa tanda, -127 dalam perpuluhan bertanda, dan 11111111 dalam bentuk perduaan.

Oleh itu, jika kita menentukan pemboleh ubah int dengan nilai 0xff , kerana Java mewakili bilangan bulat menggunakan 32 bit , nilai 0xff adalah 255 :

int x = 0xff; assertEquals(255, x);

Walau bagaimanapun, jika kita menentukan pemboleh ubah byte dengan nilai 0xff , kerana Java mewakili byte menggunakan 8 bit dan kerana byte adalah jenis data yang ditandatangani , nilai 0xff adalah -1 :

byte y = (byte) 0xff; assertEquals(-1, y);

Seperti yang kita lihat, ketika kita menentukan pemboleh ubah byte dengan nilai 0xff , kita perlu menurunkannya ke bait kerana julat jenis data bait adalah dari -128 hingga 127 .

3. Penggunaan Umum Operasi & 0xff

The & operator Melakukan bitwise DAN operasi . Keluaran bitwise AND adalah 1 jika bit yang sesuai dari dua operan adalah 1. Sebaliknya, jika salah satu bit operan adalah 0, maka hasil bit yang sesuai dinilai menjadi 0.

Oleh kerana 0xff mempunyai lapan yang dalam 8 bit terakhir , ia menjadikannya elemen identiti untuk operasi bitwise AND . Oleh itu, jika kita menggunakan operasi x & 0xff , ia akan memberi kita 8 bit terendah dari x . Perhatikan bahawa, jika nombor x kurang dari 255, ia tetap sama. Jika tidak, ia akan menjadi 8 bit terendah dari x .

Secara amnya, operasi & 0xff memberi kita cara mudah untuk mengekstrak 8 bit terendah dari nombor . Kita sebenarnya boleh menggunakannya untuk mengekstrak 8 bit yang kita perlukan kerana kita boleh beralih ke kanan mana-mana 8 bit yang kita mahu menjadi bit terendah. Kemudian, kita boleh mengekstraknya dengan menerapkan operasi & 0xff .

Mari lihat contoh untuk menerangkan beberapa faedah menggunakan & 0xff dengan lebih terperinci.

4. Mengekstrak Koordinat Warna RGBA Menggunakan & 0xff

Mari kita anggap bahawa kita mempunyai bilangan bulat x , disimpan dalam 32 bit, yang mewakili warna dalam sistem RGBA, yang bermaksud bahawa ia mempunyai 8 bit untuk setiap parameter (R, G, B, dan A):

  • R = 16 (00010000 dalam binari)
  • G = 57 (00111001 dalam binari)
  • B = 168 (10101000 dalam binari)
  • A = 7 (00000111 dalam binari)

Jadi, x dalam binari akan ditunjukkan sebagai 00010000 00111001 10101000 00000111 - yang bersamaan dengan 272214023 dalam perpuluhan.

Sekarang, kita mempunyai nilai x dalam perpuluhan, dan kita ingin mengekstrak nilai untuk setiap parameter.

Seperti yang kita ketahui, operasi >> beralih bit ke kanan. Oleh itu, apabila kita melakukannya (10000000 00000000 >> 8), itu memberi kita 10000000. Hasilnya, kita dapat mengekstrak nilai setiap parameter :

int rgba = 272214023; int r = rgba >> 24 & 0xff; assertEquals(16, r); int g = rgba >> 16 & 0xff; assertEquals(57, g); int b = rgba >> 8 & 0xff; assertEquals(168, b); int a = rgba & 0xff; assertEquals(7, a);

5. Kesimpulan

Dalam tutorial ini, kita telah membincangkan bagaimana operasi & 0xff membahagikan pemboleh ubah secara berkesan dengan cara yang hanya meninggalkan nilai dalam 8 bit terakhir dan mengabaikan bit yang lain. Seperti yang telah kita lihat, operasi ini sangat berguna ketika kita beralih ke pemboleh ubah ke kanan dan perlu mengekstrak bit yang diubah.

Seperti biasa, kod yang disajikan dalam artikel ini terdapat di GitHub.