Saya seseorang yang menulis kode hanya untuk bersenang-senang dan belum benar-benar menyelidiki itu baik dalam pengaturan akademik atau profesional, jadi hal-hal seperti operator bitwise ini benar-benar lolos dari saya.
Saya sedang membaca artikel tentang JavaScript, yang tampaknya mendukung operasi bitwise. Saya terus melihat operasi ini disebutkan di beberapa tempat, dan saya sudah mencoba membaca tentang mencari tahu apa itu sebenarnya, tapi sepertinya saya tidak mengerti sama sekali. Jadi apa mereka Contoh yang jelas akan bagus! : D
Hanya beberapa pertanyaan lagi - apa saja aplikasi praktis dari operasi bitwise? Kapan Anda menggunakannya?
Jawaban:
Karena tidak ada yang menyinggung masalah mengapa ini berguna:
Saya sering menggunakan operasi bitwise saat bekerja dengan flag. Misalnya, jika Anda ingin meneruskan serangkaian flag ke operasi (misalnya
File.Open()
,, dengan mode Baca dan mode Tulis keduanya diaktifkan), Anda bisa meneruskannya sebagai nilai tunggal. Ini dilakukan dengan menetapkan setiap flag yang mungkin, bit itu sendiri dalam bitset (byte, pendek, int, atau panjang). Sebagai contoh:Jadi jika Anda ingin lulus baca DAN menulis, Anda akan lulus (BACA | MENULIS) yang kemudian menggabungkan keduanya menjadi
Yang kemudian dapat didekripsi di ujung yang lain seperti:
yang memeriksa
yang kembali
yang bukan 0, sehingga flag tidak menentukan BACA.
Anda dapat menggunakan XOR untuk mengaktifkan berbagai bit. Saya telah menggunakan ini ketika menggunakan flag untuk menentukan input directional (Atas, Bawah, Kiri, Kanan). Sebagai contoh, jika sebuah sprite bergerak secara horizontal, dan saya ingin itu berbalik:
Saya cukup XOR nilai saat ini dengan (KIRI | KANAN) yang akan mematikan KIRI dan KANAN, dalam hal ini.
Bit Shifting berguna dalam beberapa kasus.
sama dengan
jika Anda perlu dengan cepat mengalikan dengan kekuatan dua, tapi hati-hati untuk menggeser 1-bit ke bit atas - ini membuat angka negatif kecuali itu tidak ditandatangani. Ini juga berguna ketika berhadapan dengan berbagai ukuran data. Misalnya, membaca bilangan bulat dari empat byte:
Dengan asumsi bahwa A adalah byte yang paling signifikan dan D yang paling sedikit. Itu akan berakhir sebagai:
Warna sering disimpan dengan cara ini (dengan byte paling signifikan diabaikan atau digunakan sebagai Alpha):
Untuk menemukan nilai-nilai lagi, cukup geser bit ke kanan sampai di bagian bawah, lalu sembunyikan bit urutan lebih tinggi yang tersisa:
0xFF
sama dengan11111111
. Jadi pada dasarnya, untuk Red, Anda akan melakukan ini:sumber
Perlu dicatat bahwa tabel kebenaran bit tunggal yang terdaftar sebagai jawaban lain hanya bekerja pada satu atau dua bit input sekaligus. Apa yang terjadi ketika Anda menggunakan bilangan bulat, seperti:
Jawabannya terletak pada ekspansi biner dari setiap input:
Setiap pasangan bit di setiap kolom dijalankan melalui fungsi "DAN" untuk memberikan bit output yang sesuai di baris terbawah. Jadi jawaban untuk ungkapan di atas adalah 4. CPU telah melakukan (dalam contoh ini) 8 operasi terpisah "DAN" secara paralel, satu untuk setiap kolom.
Saya menyebutkan ini karena saya masih ingat memiliki "AHA!" saat ketika saya belajar tentang ini bertahun-tahun yang lalu.
sumber
Operator bitwise adalah operator yang bekerja sedikit demi sedikit.
DAN adalah 1 hanya jika kedua inputnya adalah 1.
ATAU adalah 1 jika satu atau lebih inputnya adalah 1.
XOR adalah 1 hanya jika salah satu inputnya adalah 1.
BUKAN adalah 1 hanya jika inputnya adalah 0.
Ini dapat digambarkan sebagai tabel kebenaran. Kemungkinan input ada di bagian atas dan kiri, bit yang dihasilkan adalah salah satu dari empat (dua dalam kasus TIDAK karena hanya memiliki satu input) nilai yang ditampilkan di persimpangan dua input.
Salah satu contoh adalah jika Anda hanya ingin 4 bit integer yang lebih rendah, Anda DAN itu dengan 15 (biner 1111) jadi:
sumber
Ini adalah operator bitwise, semuanya didukung dalam JavaScript:
op1 & op2
-AND
Operator membandingkan dua bit dan menghasilkan hasil 1 jika kedua bit tersebut 1; jika tidak, ia mengembalikan 0.op1 | op2
-OR
Operator membandingkan dua bit dan menghasilkan hasil 1 jika bit tersebut saling melengkapi; jika tidak, ia mengembalikan 0.op1 ^ op2
-EXCLUSIVE-OR
Operator membandingkan dua bit dan mengembalikan 1 jika salah satu bitnya 1 dan memberikan 0 jika kedua bit tersebut 0 atau 1.~op1
-COMPLEMENT
Operator digunakan untuk membalikkan semua bit operan.op1 << op2
-SHIFT LEFT
Operator memindahkan bit ke kiri, membuang bit paling kiri, dan memberikan bit paling kanan nilai 0. Setiap gerakan ke kiri secara efektif mengalikan op1 dengan 2.op1 >> op2
-SHIFT RIGHT
Operator memindahkan bit ke kanan, membuang bit paling kanan, dan memberikan bit paling kiri nilai 0. Setiap gerakan ke kanan secara efektif membagi op1 menjadi setengah. Bit tanda paling kiri dipertahankan.op1 >>> op2
-SHIFT RIGHT
ZERO FILL
Operator - memindahkan bit ke kanan, membuang bit paling kanan, dan memberikan bit paling kiri nilai 0. Setiap gerakan ke kanan secara efektif membagi op1 menjadi dua. Bit tanda paling kiri dibuang.sumber
1 | 1
memberi1
dan tidak0
, dan bagaimana|
seharusnya berbeda^
. Saya harus menggunakan Tanya Jawab ini sebagai duplikat target beberapa hari yang lalu, dan saya berharap setelah 10 tahun kita akan memiliki duplikat kanonik yang lebih jelas untuk pertanyaan seperti ini.Untuk memecahnya sedikit lebih, ini ada hubungannya dengan representasi biner dari nilai yang dimaksud.
Semoga ini membantu.
sumber
|
itu operasi ATAU?x | y = 1000 0001 |
bagian ituKetika istilah "bitwise" disebutkan, kadang-kadang mengklarifikasi bahwa itu bukan operator "logis".
Misalnya dalam JavaScript, operator bitwise memperlakukan operan mereka sebagai urutan 32 bit (nol dan satu) ; Sementara itu, operator logis biasanya digunakan dengan nilai Boolean (logis) tetapi dapat bekerja dengan tipe non-Boolean.
Ambil expr1 && expr2 sebagai contoh.
Seperti yang telah dicatat orang lain, 2 & 4 adalah bitwise AND, jadi itu akan mengembalikan 0.
Anda dapat menyalin yang berikut ini ke test.html atau sesuatu dan menguji:
sumber
operasi :
bitwise DAN
bitwise ATAU
bitwise TIDAK
bitor XOR
dll
Daftar barang
Misalnya.
Penggunaan operator bitwise
Misalnya.
Misalnya.
if else
pernyataanMisalnya.
Misalnya.
menggeser bitwise hanya berfungsi dengan nomor + ve
Juga ada berbagai macam penggunaan logika bitwise
sumber
The left-shift and right-shift operators are equivalent to multiplication and division by x * 2y respectively.
Betul sekali! muyiy.cn/question/program/102.htmlMungkin membantu untuk memikirkannya dengan cara ini. Inilah cara AND (&) bekerja:
Pada dasarnya dikatakan keduanya adalah angka-angka ini, jadi jika Anda memiliki dua angka 5 dan 3 mereka akan dikonversi menjadi biner dan komputer akan berpikir
keduanya satu: 00000001 0 salah, 1 benar
Jadi AND dari 5 dan 3 adalah satu. Operator OR (|) melakukan hal yang sama kecuali hanya satu angka yang harus satu untuk output 1, bukan keduanya.
sumber
Saya terus mendengar tentang betapa lambatnya operator bitwise JavaScript. Saya melakukan beberapa tes untuk posting blog terbaru saya dan menemukan mereka 40% hingga 80% lebih cepat daripada alternatif aritmatika dalam beberapa tes. Mungkin mereka dulu lambat. Di browser modern, saya suka mereka.
Saya memiliki satu case dalam kode saya yang akan lebih cepat dan lebih mudah dibaca karena ini. Saya akan terus membuka mata untuk lebih.
sumber