Kalkulator Programmer & Kalkulator Bitwise

Ketik satu ekspresi menggunakan literal heksadesimal 0x, biner 0b, dan oktal 0o, operator bitwise & | ^ ~, geser << >> >>>, rotasi, dan aritmetika biasa — hasilnya diperbarui langsung sebagai desimal, heksadesimal, oktal, dan biner pada ukuran word 8, 16, 32, atau 64 bit, bertanda atau tak bertanda. Di bawah ini ada kisi bit yang dapat diklik, panel bitwise dua operand (AND / OR / XOR / NAND / NOR / NOT / geser / ROL / ROR), dan setel / hapus / balik satu bit. Untuk konversi basis sederhana tanpa logika bit lihat Konverter Matematika; untuk statistik lihat Kalkulator Statistik.
Ukuran word   Tampilan   Operator: & | ^ ~ << >> >>> + - * / % ( ) — matematika bilangan bulat saja, hasil dibungkus pada ukuran word.
DEC
HEX
OCT
BIN
Bit ditampilkan dari yang paling signifikan terlebih dahulu; sel yang redup berada di luar ukuran word saat ini.
indeks bit (0 = paling tidak signifikan)
A =    B =  A dan B menerima ekspresi lengkap (mis. 1 << 12).
Tabel hasil muncul setelah A dan B keduanya dapat diurai. Geser dan rotasi mengambil jumlah dari B.
Coba contoh:
Cara geser berperilaku: << dikembalikan ke ukuran word (bit yang keluar dari atas hilang). >>> selalu geser logis (tak bertanda). >> mengikuti pemilih Tampilan: aritmetika dalam mode bertanda, logis dalam mode tak bertanda. Privasi: seluruh kalkulator berjalan di tab ini — tanpa server, tanpa penyimpanan.

Apa itu kalkulator programmer?

Kalkulator programmer melakukan aritmetika seperti komputer menyimpannya: dalam word bit dengan lebar tetap. Alih-alih satu garis bilangan tak berujung, word 8-bit adalah lingkaran dari 256 nilai, word 32-bit lingkaran dari 4,294,967,296. Setiap hasil dibungkus kembali ke dalam lingkaran itu, dan bit yang sama dapat dibaca sebagai hitungan tak bertanda (0 … 255) atau sebagai nilai komplemen dua bertanda (-128 … 127). Keempat baris basis di atas adalah bit yang sama yang ditampilkan dengan empat cara — ubah salah satu, dan ketiga lainnya mengikuti.

Mengapa programmer hidup dengan heksadesimal

Satu digit heksa tepat empat bit, sehingga satu byte selalu dua digit heksa, word 32-bit selalu delapan. Heksa adalah biner dengan nol dikelompokkan ulang agar mudah dibaca manusia:

BinerHexDesimal
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (atau -128 bertanda)

Komplemen dua dalam satu paragraf

Untuk membaca word sebagai bertanda, lihat bit teratasnya. Jika 0, nilainya hanya hitungan tak bertanda. Jika 1, kurangi ukuran lingkaran: 0xFF 8-bit adalah 255 − 256 = −1. Itulah seluruh triknya — -x dan 0 - x menghasilkan bit yang identik, itulah sebabnya perangkat penjumlah yang sama bekerja untuk keduanya. Pembalikan tanda adalah "balik setiap bit, tambah 1": NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Operator geser sekilas

OperatorNamacontoh 8-bit (a = 0xF0)
a << 1geser kiri0xE0 — bit teratas keluar, nol masuk dari bawah
a >> 1 (tak bertanda)geser kanan logis0x78 — nol masuk dari atas
a >> 1 (bertanda, a = −16)geser kanan aritmetika0xF8 = −8 — bit tanda disalin
a >>> 1selalu logis0x78 terlepas dari pemilih Tampilan
rol(a, 1)putar kiri0xE1 — bit teratas yang keluar masuk kembali dari bawah

Kesalahan umum yang dibantu halaman ini untuk dihindari

Geser aritmetika vs geser logis: menyalin bit tanda (aritmetika) dan mengisi dengan nol (logis) berbeda setiap kali bit teratas aktif — ubah pemilih Tampilan dan amati 0xF0 >> 1 berubah antara 0x78 dan 0xF8.
Kejutan 53-bit: tipe Number biasa JavaScript adalah float 64-bit dengan hanya 53 bit bilangan bulat yang aman, sehingga 0xFFFFFFFFFFFFFFFF tidak dapat direpresentasikan secara tepat — halaman ini menggunakan aritmetika bilangan bulat 64-bit yang tepat secara internal, sehingga setiap digit heksa yang Anda lihat dapat dipercaya.
Jebakan float: 0.1 + 0.2 terkenal menghasilkan 0.30000000000000004 dalam bilangan floating point; kalkulator ini hanya bilangan bulat secara desain — pembagian memotong ke arah nol, persis seperti / pada int di C.
Angka nol di depan: dalam C lama, literal seperti 052 berarti oktal. Di sini desimal adalah digit biasa dan oktal memerlukan awalan 0o, sehingga tidak ada yang ambigu.

FAQ

Berapa bilangan terbesar? — 64-bit tak bertanda: 18,446,744,073,709,551,615 (0xFFFFFFFFFFFFFFFF); bertanda: ±9,223,372,036,854,775,808.
Mengapa 1 << 8 menjadi 0? — ukuran word adalah 8 bit; bit 8 tidak ada, dan masker membuangnya. Ganti ke 16/32/64 bit untuk mempertahankannya.
Apa yang dilakukan ~? — NOT bitwise: setiap bit dibalik di dalam ukuran word saat ini, sehingga ~0 adalah semua-satu (255 / 65535 / −1 …).
Apakah ada floating point? — tidak, hanya bilangan bulat; gunakan Kalkulator Ilmiah untuk float, trigonometri, dan fungsi.
Apakah ada yang meninggalkan mesin ini? — tidak: tanpa server, tanpa penyimpanan, tanpa analitik; tutup tab dan semuanya hilang.