Konverter basis bilangan

Mengonversi bilangan antara biner, oktal, desimal, heksadesimal, dan basis 2–36, dengan komplemen dua lebar-tetap dan kisi bit yang bisa diklik.

Lebar
Biner
Oktal
Desimal
Heksadesimal
Basis
Bit — klik untuk membalik

Lebar 8 bit, 8 terpasang

Apa yang dilakukan alat ini

Angka yang sama bisa ditulis dalam banyak basis, dan pemrogram berpindah antara empat di antaranya terus-menerus: biner karena itulah yang ditampung perangkat keras, heksadesimal karena ia singkatan terbaca untuk biner, desimal karena begitulah orang berpikir, dan oktal karena izin berkas dan beberapa sistem lama masih memakainya. Ketik sebuah nilai ke bidang mana pun di sini dan sisanya mengikuti, bersama satu bidang lagi yang bisa Anda atur ke basis mana pun dari 2 hingga 36.

Yang memisahkan ini dari kalkulator sekolah adalah pemilih lebar dan kisi bit. Pilih 8, 16, 32, atau 64 bit dan bilangan negatif mendapat representasi mesin sungguhannya alih-alih sebuah tanda minus, dan setiap bit menjadi sesuatu yang bisa Anda klik.

Apa sebenarnya sebuah basis itu

Sebuah basis adalah berapa banyak digit yang Anda punya sebelum kehabisan dan harus menyimpan-pindah. Desimal punya sepuluh, jadi setelah 9 datang 10. Biner punya dua, jadi setelah 1 datang 10. Posisi tiap digit adalah pangkat dari basisnya, dan itulah keseluruhannya:

1011           # the number, in base 2
1 x 8 = 8      # bit 3
0 x 4 = 0      # bit 2
1 x 2 = 2      # bit 1
1 x 1 = 1      # bit 0
8+0+2+1 = 11   # the total, in decimal

Basis di atas sepuluh butuh lebih dari sepuluh simbol digit, jadi mereka meminjam huruf: heksadesimal berjalan 0-9 lalu a-f, tempat a adalah 10 dan f adalah 15. Itu berlanjut sepanjang jalan ke basis 36, yang memakai setiap digit dan setiap huruf — basis terbesar yang bisa Anda tulis dengan alfabet polos, dan alasan alat ini berhenti di sana.

Mengapa heksadesimal, dan bukan yang lain

Heksadesimal populer karena satu alasan spesifik: 16 adalah 2 pangkat 4, jadi persis satu digit heksadesimal mencakup persis empat bit. Itu membuat konversi antara heksadesimal dan biner sebuah pencarian tanpa aritmetika — tiap digit heksadesimal mengembang ke empat bitnya sendiri, mandiri dari digit di sekitarnya.

d    e    a    d
1101 1110 1010 1101   # each hex digit is its own nibble

Oktal bekerja dengan cara yang sama dengan tiga bit per digit, karena 8 adalah 2 pangkat 3 — itulah sebabnya izin Unix oktal: tiga bit izin per kelompok pengguna pas satu digit persis. Desimal tak punya hubungan semacam itu dengan biner, itulah sebabnya mengonversi antara keduanya butuh pembagian sungguhan ketimbang sebuah pencarian.

Ini juga sebabnya bidang biner di sini dikelompokkan berempat dan bidang heksadesimal berpasangan: kelompoknya sejajar dengan batas yang penting, jadi Anda bisa membaca sebuah nibble atau sebuah bita dari layar tanpa menghitung.

Bilangan negatif dan komplemen dua

Sebuah bilangan negatif tak punya bentuk biner sendiri. Tak ada tanda minus dalam sebuah register — hanya bit — jadi tandanya harus dikodekan dalam bit itu sendiri, dan itu butuh memutuskan berapa banyak bit yang ada. Inilah sebabnya pemilih lebar ada, dan mengapa jawabannya berubah ketika Anda mengubahnya.

Skema yang dipakai setiap mesin modern adalah komplemen dua: untuk merepresentasikan sebuah bilangan negatif, ambil bentuk positifnya, balikkan setiap bit, dan tambah satu. Hasilnya adalah bit teratas berakhir berarti "negatif", dan penjumlahan biasa terus bekerja tanpa kasus khusus untuk tanda.

0000 0101   # 5
1111 1010   # every bit inverted
1111 1011   # plus one: -5 as a byte, or fb in hex

Lebarkan register dan bilangan yang sama mendapat pola berbeda: -5 adalah fb dalam 8 bit, fffb dalam 16, dan fffffffb dalam 32. Nilainya tak berubah; jumlah bit yang membawanya berubah. Mengalihkan lebar dalam alat ini menampilkan persis itu.

Mengapa 0xFF adalah sekaligus 255 dan −1

Bit ff tak mengatakan apakah mereka bertanda. Sebuah bita yang menampung 1111 1111 terbaca sebagai 255 jika kode yang memuatnya mendeklarasikan tipe tak bertanda, dan sebagai −1 jika ia mendeklarasikan yang bertanda. Tak ada dalam bita itu sendiri yang membedakan keduanya — tipenya adalah sebuah klaim yang dibuat program tentang bit yang tak membawa informasi semacam itu.

Itulah sumber sebuah keluarga penuh bug nyata: sebuah checksum yang keluar negatif, sebuah bita yang dibaca dari berkas yang dibandingkan sebagai kurang dari nol, sebuah char C yang berperilaku berbeda di ARM ketimbang x86 karena ketertandaannya ditentukan-implementasi. Kapan pun pembacaan bertanda dan tak bertanda berbeda, alat ini menampilkan keduanya, karena ketidakcocokan itu biasanya adalah hal yang Anda cari.

Kisi bit

Setiap bit dari nilai saat ini ditampilkan dengan nomor posisinya, dan mengklik satu membaliknya. Basis diperbarui seketika, yang membuat beberapa pertanyaan jauh lebih mudah dijawab daripada dengan tangan:

  • Bit mana yang terpasang dalam nilai flag ini — klik menembusnya dan baca posisinya.
  • Apa mask untuk bit 4 dan 7 — pasang kedua itu dan baca heksadesimalnya.
  • Apa yang dilakukan memasang bit teratas pada sebuah nilai bertanda — ia menjadikannya negatif, secara terlihat.
  • Apakah nilai ini sebuah pangkat dua — sebuah pangkat dua punya persis satu bit terpasang.

Bit 0 adalah bit paling tak signifikan dan duduk di kanan, yang merupakan konvensi universal dan alasan kisi tetap kiri-ke-kanan bahkan pada halaman kanan-ke-kiri. Baris selebar delapan bit sehingga batas bita terlihat sekilas.

Bilangan besar tetap persis

Bilangan JavaScript adalah double, yang menampung bilangan bulat secara persis hanya sampai 2^53 — sekitar 9 kuadriliun. Sebuah nilai 64-bit bisa melampaui itu, dan sebuah konverter yang dibangun di atas bilangan biasa akan diam-diam membulatnya, memberi string heksadesimal yang tampak masuk akal dan salah pada digit terakhirnya.

Semua di sini memakai bilangan bulat presisi-sembarang sebagai gantinya, jadi sebuah nilai 64-bit penuh dikonversi persis. Mode lebar presisi-sembarang melangkah lebih jauh dan menghapus batasnya sepenuhnya — berguna untuk nilai kriptografis dan pengenal besar — tetapi perhatikan bahwa tanpa lebar tetap tak ada komplemen dua, jadi sebuah bilangan negatif dalam mode itu cukup membawa tanda minus dalam setiap basis.

Pertanyaan yang sering diajukan

Mengapa −5 tampil sebagai fb alih-alih −101 dalam biner?
Karena sebuah register tak punya tanda minus. Dengan sebuah lebar dipilih, bilangan negatif ditampilkan dalam komplemen dua, yang adalah yang sebenarnya disimpan mesin: −5 dalam sebuah bita adalah 1111 1011, atau fb. Jika Anda menginginkan bentuk matematis dengan sebuah tanda, alihkan lebar ke presisi sembarang.
Apakah 0xFF itu 255 atau −1?
Keduanya — bitnya identik dan hanya tipe yang dideklarasikan yang memutuskan. Sebuah nilai 8-bit bertanda membaca ff sebagai −1; yang tak bertanda membacanya sebagai 255. Kapan pun kedua pembacaan berbeda, alat ini menampilkannya berdampingan.
Mengapa heksadesimal dipakai begitu banyak alih-alih desimal?
Karena satu digit heksadesimal persis empat bit, jadi heksadesimal dan biner dikonversi lewat pencarian tanpa aritmetika dan digitnya sejajar dengan batas bita. Desimal tak punya hubungan semacam itu dengan biner, jadi sebuah nilai desimal tak memberi tahu Anda apa pun tentang bit mana yang terpasang.
Apa basis tertinggi di sini, dan mengapa 36?
36, karena itu adalah 10 digit ditambah 26 huruf — setiap simbol yang ditawarkan alfabet Latin polos. Naik lebih tinggi akan butuh sebuah konvensi tentang karakter tambahan mana yang dipakai, dan tak ada satu yang disepakati.
Bisakah saya menempel sebuah nilai dengan 0x atau spasi di dalamnya?
Ya. Prefiks 0x, 0b, dan 0o diterima dalam basis yang cocok, dan spasi serta garis bawah diabaikan, jadi Anda bisa menempel langsung dari kode atau lembar data tanpa membersihkannya dulu.
Apakah sebuah nilai 64-bit akan dikonversi persis?
Ya. Semua aritmetika memakai bilangan bulat presisi-sembarang, jadi nilai melampaui 2^53 — tempat bilangan JavaScript biasa mulai membulat — tetap persis.
Apakah ada yang saya ketik dikirim ke server?
Tidak. Ini aritmetika di browser Anda; tak ada yang diunggah atau dicatat, dan ia bekerja tanpa koneksi jaringan.