Bitwise Kalkulator

Lakukan operasi bitwise pada bilangan bulat dan lihat hasilnya dalam desimal, heksadesimal, dan biner.

Masukkan nilai dan klik Hitung.

Cara kerjanya

  1. Masukkan dua angka: masukkan nilai untuk dioperasikan, dalam desimal, biner (awalan 0b), atau heksadesimal (awalan 0x).
  2. Pilih operasi: pilih AND, OR, XOR, NOT, pergeseran kiri (<<), atau pergeseran kanan (>>).
  3. Lihat hasilnya: keluaran menampilkan hasil dalam desimal, biner, dan heksadesimal sekaligus, dengan visualisasi bit-by-bit.

Mengapa menggunakan kalkulator biner?

Operasi bitwise sangat penting dalam pemrograman sistem, kriptografi, pengembangan game, grafis, jaringan, dan sistem tertanam. Memahami bagaimana AND, OR, XOR, dan pergeseran memanipulasi bit individu sangat penting untuk mengaktifkan/menonaktifkan flag, memadatkan data, dan mengimplementasikan algoritma yang efisien. Kalkulator ini menampilkan operasi pada level bit untuk melihat persis bagaimana setiap bit terpengaruh.

Fitur

Pertanyaan umum

Untuk apa XOR digunakan dalam pemrograman?

XOR (^) digunakan untuk membalik bit, melakukan enkripsi/obfuskasi sederhana, menukar variabel tanpa variabel sementara, memeriksa paritas, dan mencampur hash. Mengembalikan 1 saat bit berbeda dan 0 saat sama.

Apa perbedaan antara << dan >>?

Pergeseran kiri (<<) memindahkan semua bit ke kiri, setara dengan perkalian dengan kekuatan 2. Pergeseran kanan (>>) memindahkan bit ke kanan, setara dengan pembagian dengan kekuatan 2. Pergeseran kanan aritmetika mempertahankan bit tanda; pergeseran kanan logis mengisi dengan nol.

Bagaimana cara mengaktifkan atau menonaktifkan bit tertentu?

Untuk mengaktifkan bit n: value |= (1 << n). Untuk menonaktifkan bit n: value &= ~(1 << n). Untuk membalik bit n: value ^= (1 << n). Untuk memeriksa apakah bit n aktif: (value & (1 << n)) !== 0.

Dari aljabar Boolean ke silikon: bagaimana operasi bitwise menjadi universal

Operasi bitwise yang diimplementasikan setiap CPU modern berasal dari dua makalah fundamental yang diterbitkan dengan jarak lebih dari 80 tahun. Pada 1854, George Boole menerbitkan «An Investigation of the Laws of Thought», mendefinisikan aljabar logika dua nilai, AND, OR, NOT, dan identitasnya. Itu adalah karya filosofis, bukan teknik. Kemudian pada 1937, seorang mahasiswa pascasarjana MIT berusia 21 tahun bernama Claude Shannon menulis tesis masternya «A Symbolic Analysis of Relay and Switching Circuits», membuktikan bahwa aljabar Boolean dapat menggambarkan sirkuit relai listrik dan oleh karena itu setiap perhitungan logis dapat diimplementasikan secara fisik. Tesis ini banyak dikutip sebagai tesis master paling penting abad ke-20 dan merupakan fondasi semua elektronika digital. Komplemen dua, representasi biner untuk angka negatif yang digunakan setiap CPU, dipatenkan pada 1962 oleh Burroughs Corporation tetapi telah digunakan di IBM 704 (1954) dan mesin awal lainnya. IEEE 754 menstandardisasi representasi floating-point pada 1985, menetapkan tata letak bit yang masih digunakan setiap Number JavaScript, 1 bit tanda, 11 eksponen, 52 mantissa untuk binary64. Hari ini, operator bahasa C & | ^ ~ << >> hampir langsung dipetakan ke instruksi CPU tunggal, itulah sebabnya kode bitwise dapat secara dramatis lebih cepat daripada ekuivalen aritmatika.

Enam operator, apa yang mereka lakukan di tingkat bit

Di mana bitwise benar-benar mendapatkan upahnya

Kesalahan yang menggigit

Mengapa komplemen dua, dan apa artinya di tingkat bit

Setiap CPU modern merepresentasikan integer negatif menggunakan komplemen dua. Dalam byte bertanda 8-bit, nilai 0 hingga 127 dikodekan sebagai biner 0000_0000 hingga 0111_1111. Kemudian −1 dikodekan sebagai 1111_1111, −2 sebagai 1111_1110, hingga −128 sebagai 1000_0000. Alasannya: dengan pengkodean ini, penjumlahan bekerja dengan cara yang sama baik input bertanda atau tidak bertanda, CPU tidak memerlukan instruksi add-bertanda dan add-tidak-bertanda terpisah. Asimetri adalah bahwa rentang negatif satu lebih besar dari positif (dalam 8 bit, −128 hingga +127), itulah sebabnya Math.abs(INT_MIN) meluap di setiap bahasa dengan integer lebar tetap. Pengkodean yang lebih lama tanda-besaran (satu bit untuk tanda, sisanya untuk besaran) dan komplemen satu ada di tahun 1950-60-an tetapi kalah dari komplemen dua karena mereka memiliki dua representasi nol dan memerlukan perangkat keras kasus khusus untuk negasi.

Pertanyaan yang lebih sering diajukan

Mengapa ~5 sama dengan -6 bukan 250?

Karena dalam komplemen dua (pengkodean yang digunakan setiap CPU modern), membalik setiap bit angka positif memberi Anda -n - 1. Jadi ~5 === -6 dan ~0 === -1. Dalam konteks tidak bertanda 8-bit, pola bit yang sama dengan ~5 (biner 1111_1010) akan mewakili 250. JavaScript memperlakukan hasilnya sebagai bertanda 32-bit, jadi Anda melihat -6. Untuk mendapatkan interpretasi tidak bertanda: (~5) >>> 0 di 32-bit, yang memberikan 4294967290, atau mask ke 8 bit dengan ~5 & 0xFF yang memberikan 250.

Apakah XOR benar-benar enkripsi?

XOR adalah blok pembangun setiap cipher simetris modern, tetapi XOR sendiri bukan enkripsi yang aman. Sebuah one-time pad, XOR dengan kunci benar-benar acak sepanjang pesan, digunakan tepat satu kali, secara teori informasi tidak dapat dipecahkan (Shannon, 1949). Gunakan kembali kunci, atau gunakan kunci lebih pendek dari pesan, dan analisis frekuensi memecahkannya secara sepele. Cipher nyata seperti AES menggunakan XOR ditambah difusi dan substitusi untuk memperkuat kunci pendek menjadi aliran byte semu-acak yang terlihat seperti one-time pad bagi siapa saja tanpa kunci. Jadi «enkripsi dengan XOR» baik hanya untuk pengaburan sepele, tidak pernah untuk rahasia nyata.

Kapan saya harus menggunakan BigInt alih-alih Number untuk manipulasi bit?

Kapan saja Anda memerlukan presisi bitwise lebih dari 32 bit. Operator bitwise JavaScript memotong operan Number ke integer bertanda 32-bit sebelum perhitungan. Jika Anda memerlukan mask 64-bit (misalnya, memanipulasi set flag fitur 64-bit, bekerja dengan offset mmap Linux, atau mengimplementasikan SHA-512), gunakan BigInt: 0xFFFFFFFFFFFFFFFFn & 0xFFn === 255n. BigInt lebih lambat daripada Number, ~3-10× tergantung operasi, jadi simpan untuk kasus di mana 32 bit benar-benar terlalu sedikit.

Bagaimana saya menghitung jumlah bit 1 dalam suatu angka?

Ini adalah jumlah populasi atau bobot Hamming. Sebagian besar CPU modern memiliki satu instruksi untuknya (POPCNT di x86, VCNT di ARM). Di JavaScript, tidak ada bawaan, jadi gunakan klasik bit-twiddling: let c = 0; while (x) { c += x & 1; x >>>= 1; }. Atau trik SWAR paralel dari Hacker's Delight: x = x - ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0F0F0F0F; return (x * 0x01010101) >>> 24;, yang menghitung bit dalam integer 32-bit dalam sekitar selusin siklus.

Apakah data saya dikirim ke mana pun ketika saya menggunakan kalkulator ini?

Tidak. Setiap operasi berjalan di mesin JavaScript browser Anda, tidak ada panggilan jaringan yang terjadi selama perhitungan. Buka tab Jaringan di DevTools dan klik Hitung, Anda akan melihat nol permintaan keluar. Aman untuk mask sensitif, kunci, atau pekerjaan tata letak bit eksklusif.

Alat terkait

Biner ke Teks Konverter Angka Base Konverter Chmod Kalkulator Generator Hash Gratis