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 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 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 tanda minus, dan setiap bit menjadi sesuatu yang bisa Anda klik.
Apa sebenarnya basis itu
Basis adalah berapa banyak digit yang Anda punya sebelum habis dan harus menyimpan ke posisi berikutnya. 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 terus hingga 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 pencarian tanpa aritmetika — tiap digit heksadesimal mengembang ke empat bitnya sendiri, terlepas 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 memakai 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 pencarian.
Ini juga sebabnya bidang biner di sini dikelompokkan per empat dan bidang heksadesimal berpasangan: kelompoknya sejajar dengan batas yang penting, jadi Anda bisa membaca nibble atau bita dari layar tanpa menghitung.
Bilangan negatif dan komplemen dua
Bilangan negatif tak punya bentuk biner sendiri. Tak ada tanda minus dalam 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 bilangan negatif, ambil bentuk positifnya, balikkan setiap bit, dan tambah satu. Hasilnya, bit teratas akhirnya 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. 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 klaim yang dibuat program tentang bit yang tak membawa informasi semacam itu.
Itulah sumber seluruh keluarga bug nyata: checksum yang keluar negatif, bita yang dibaca dari berkas yang dibandingkan sebagai kurang dari nol, char C yang berperilaku berbeda di ARM ketimbang x86 karena ketertandaannya ditentukan oleh 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 satu per satu dan baca posisinya.
- Apa mask untuk bit 4 dan 7 — pasang keduanya dan baca heksadesimalnya.
- Apa efek memasang bit teratas pada nilai bertanda — ia menjadikannya negatif, dan itu terlihat.
- Apakah nilai ini pangkat dua — 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. Nilai 64-bit bisa melampaui itu, dan 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 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 bilangan negatif dalam mode itu cukup membawa tanda minus dalam setiap basis.
Dari biner ke desimal, dan dari desimal ke biner
Biner dan desimal adalah satu-satunya pasangan di sini yang tak berbagi apa pun: dua bukan pangkat dari sepuluh dan sepuluh bukan pangkat dari dua, jadi tak satu pun arahnya berupa pencarian dan keduanya menuntut aritmetika sungguhan. Keduanya juga bukan aritmetika yang sama, dan itulah bagian yang jarang diucapkan: metode tangan yang cepat ke satu arah bukan kebalikan dari metode tangan yang cepat untuk kembali.
- Dari biner ke desimal, dengan melipatduakan: mulai dari bit paling kiri dengan nol, lalu untuk tiap bit lipatduakan yang sudah ada dan tambahkan bit itu. Untuk 1011 hasilnya berjalan 1, 2, 5, 11 — satu kali lintasan, tanpa nilai posisi yang perlu diingat, dan itu persis yang dilakukan alat ini saat membaca yang Anda ketik.
- Dari biner ke desimal, lewat posisi: jumlahkan nilai posisi tiap bit yang terpasang, yaitu contoh terurai di atas. Lebih cepat saat hanya dua atau tiga bit terpasang, dan lebih lambat saat hampir semuanya terpasang.
- Dari desimal ke biner, dengan membagi: bagi dua dan catat sisanya, berulang-ulang, sampai tak ada yang tersisa; lalu baca sisa-sisanya dari bawah ke atas. Jawabannya datang dengan bit paling tak signifikan lebih dulu, dan karena itu ia tampak terbalik selama Anda menuliskannya.
- Dari desimal ke biner, dengan mengurangi: ambil pangkat dua terbesar yang muat, lalu ulangi. 200 kehilangan 128 dan tersisa 72; 72 kehilangan 64 dan tersisa 8; 8 kehilangan 8 dan tak tersisa apa pun — jadi bit pada posisi 7, 6, dan 3 terpasang dan bitanya adalah 1100 1000. Lebih cepat daripada membagi setiap kali bit yang terpasang sedikit.
Ada satu hal yang tak dicakup metode tangan mana pun di sini: bilangan desimal negatif sama sekali tak punya bentuk biner sampai lebar dipilih. Minta minus lima dalam biner dan jawaban yang jujur adalah pertanyaan balik — berapa bit? Itulah yang diputuskan pemilih lebar, dan itu pula yang dibahas bagian tentang komplemen dua di atas. Dalam mode presisi sembarang tak ada lebar, jadi tanda minus cukup ikut serta ke basis mana pun.
Dari desimal ke heksadesimal, dan dari heksadesimal ke desimal
Nyaris tak ada orang yang sering melakukan ini membagi dengan enam belas. Jalan pintasnya adalah hubungan heksadesimal dengan biner: ubah bilangan desimal ke biner sekali, potong bitnya menjadi kelompok empat mulai dari kanan, dan baca tiap kelompok sebagai satu digit heksadesimal. Jalan pulangnya adalah rute yang sama secara terbalik — kembangkan tiap digit heksadesimal menjadi empat bitnya, lalu jumlahkan nilai posisi bit yang terpasang. Untuk apa pun yang muat dalam satu bita ada jalan yang lebih pendek lagi: digit heksadesimal pertama bernilai enam belas kali digit kedua, jadi tinggal dikalikan dan dijumlahkan.
- 255 adalah ff — bita dengan setiap bitnya terpasang. Inilah yang layak dihafal, karena di situlah bita berhenti.
- 256 adalah 100. Satu langkah melewati bita penuh, digitnya berputar, persis seperti 99 berputar menjadi 100 dalam desimal, dan bilangan heksadesimal itu mendapat digit yang tak sanggup ditampung bita.
- 65535 adalah ffff dan 65536 adalah 10000: dua penanda yang sama satu bita di atasnya, tempat pencacah enam belas bit berhenti.
- 4096 adalah 1000, dan karena itu ukuran halaman, penyelarasan, dan pergeseran di memori tampak bulat dalam heksadesimal dan bergerigi dalam desimal. Heksadesimal menghitung per empat bit, dan perangkat keras juga begitu.
Huruf besar dan kecil tak berpengaruh: FF dan ff adalah nilai yang sama, alat ini menerima kedua penulisan di masukan dan menulis huruf kecil di keluaran. Yang tak akan ia lakukan adalah menebak. Prefiks 0x milik bidang heksadesimal dan di bidang desimal ia ditolak alih-alih dibuang diam-diam, karena nilai yang terbaca dalam basis yang salah adalah satu-satunya kesalahan yang tak boleh dibuat tampak masuk akal oleh konverter.
Dari oktal ke desimal, dan nol di depan yang mengubah jawabannya
Oktal bertahan di satu tempat lebih daripada di mana pun: izin berkas, tempat tiga bit izin per kelompok pengguna pas persis dalam satu digit oktal. Mengubahnya ke desimal adalah aritmetika posisi biasa dengan pangkat delapan — 755 dalam oktal adalah tujuh kali enam puluh empat ditambah lima kali delapan ditambah lima, yaitu 493 — dan arah sebaliknya adalah pembagian dengan delapan dengan sisa yang dibaca dari bawah ke atas, bentuk yang sama seperti dari desimal ke biner dan karena alasan yang sama: delapan pun tak punya hubungan dengan sepuluh.
- 755 adalah 493 dalam desimal, 644 adalah 420, dan 777 adalah 511. Tak satu pun bilangan desimal itu berguna bagi siapa pun, dan justru itulah intinya — izin ditulis dalam oktal karena digitnya sejajar dengan bit izin, bukan karena nilainya menghitung sesuatu.
- Nol di depan adalah penanda basis dalam C dan Python 2: di sana 0755 adalah oktal dan karenanya bilangan 493. Python 3 menolak penulisan itu sama sekali dan meminta 0o755 sebagai gantinya, yang menyingkirkan satu keluarga penuh galat senyap.
- YAML 1.1 juga membaca 0755 tanpa tanda kutip sebagai 493 — karena itu mode izin dalam berkas konfigurasi harus diberi tanda kutip, kalau tidak ia berhenti menjadi mode yang Anda tulis.
- JSON tak pernah mengizinkannya: tata bahasanya melarang nol di depan pada bilangan, jadi di sana 0755 bahkan bukan bilangan melainkan galat penguraian — yang paling nyaring dari ketiga perilaku itu, dan satu-satunya yang mustahil dibaca keliru.
Alat ini tak melihat nol di depan sebagai penanda apa pun. Yang menetapkan basis adalah bidang tempat Anda mengetik: 0755 di bidang desimal adalah 755 dan di bidang oktal adalah 493, dan prefiks 0o diterima di bidang oktal serta ditolak di semua bidang lain. Menebak basis dari prefiks berarti mengembalikan bilangan yang berbeda dari yang diketik.
Dari oktal ke heksadesimal: pasangan tanpa jalan pintas
Keduanya pangkat dua, jadi keduanya sekadar pengelompokan ulang bit yang sama — namun inilah satu-satunya pasangan di antara keempat basis yang sama sekali tak punya aturan digit lawan digit. Satu digit oktal adalah tiga bit, satu digit heksadesimal adalah empat, dan tak satu pun dari kedua bilangan itu membagi habis yang lain, sehingga batasnya tak pernah sejajar. Tak ada cara melewati penulisan bit dan pengelompokannya kembali.
- Tulis tiap digit oktal dengan tiga bitnya, berurutan: 755 menjadi 111 101 101.
- Kelompokkan ulang bit itu per empat dari ujung kanan, dan isi sebelah kiri dengan nol bila jumlahnya tak habis dibagi: 0001 1110 1101.
- Baca tiap kelompok empat sebagai satu digit heksadesimal: 1ed. Mengisi dari ujung yang salah adalah kesalahan klasik di sini, dan ia tak tampak salah — ia hanya melipatgandakan jawabannya diam-diam.
Bahwa dua digit heksadesimal tepat satu bita dan dua digit oktal bukan, itulah seluruh alasan heksadesimal menggeser oktal untuk membaca memori: delapan bit adalah dua digit oktal dan dua pertiga, jadi batas bita jatuh di tengah digit. Oktal cocok untuk mesin yang ukuran katanya kelipatan tiga bit; heksadesimal cocok untuk bita delapan bit. Dan di halaman ini, untuk pasangan ini, kisi bit lebih cepat daripada kedua metode tangan itu — pasang bitnya sekali dan kedua bidang sudah menampilkan jawabannya.
Pertanyaan yang sering diajukan
- Mengapa −5 tampil sebagai fb alih-alih −101 dalam biner?
- Karena register tak punya tanda minus. Dengan lebar dipilih, bilangan negatif ditampilkan dalam komplemen dua, yang adalah yang sebenarnya disimpan mesin: −5 dalam bita adalah 1111 1011, atau fb. Jika Anda menginginkan bentuk matematis dengan tanda, alihkan lebar ke presisi sembarang.
- Apakah 0xFF itu 255 atau −1?
- Keduanya — bitnya identik dan hanya tipe yang dideklarasikan yang memutuskan. 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 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 konvensi tentang karakter tambahan mana yang dipakai, dan tak ada satu yang disepakati.
- Bisakah saya menempel 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 nilai 64-bit akan dikonversi persis?
- Ya. Semua aritmetika memakai bilangan bulat presisi sembarang, jadi nilai yang melampaui 2^53 — tempat bilangan JavaScript biasa mulai membulat — tetap persis.
- Apakah ada yang saya ketik dikirim ke server?
- Tidak. Ini aritmetika di peramban Anda; tak ada yang diunggah atau dicatat, dan ia bekerja tanpa koneksi jaringan.
- Bagaimana cara mengubah biner ke desimal dengan tangan?
- Lipatduakan dan tambahkan, dari kiri: mulai dari nol dan untuk tiap bit lipatduakan yang sudah ada lalu tambahkan bitnya. 1011 berjalan 1, lalu 2, lalu 5, lalu 11. Itu satu kali lintasan tanpa nilai posisi yang perlu diingat, dan metode yang sama berlaku di basis mana pun — kalikan dengan basisnya alih-alih melipatduakan.
- Berapa 255 dalam heksadesimal, dan mengapa bilangan ini terus muncul?
- ff. Ia adalah bita dengan kedelapan bitnya terpasang, jadi nilai terbesar yang ditampung satu bita dan titik saat pencacahan berputar ke bita kedua — karena itu ia muncul di kanal warna, topeng, dan batas ukuran di mana-mana. Satu lebih banyak adalah 256, ditulis 100 dalam heksadesimal.
- Apakah 0755 bilangan yang sama dengan 755?
- Di sini ya di bidang desimal dan tidak di bidang oktal: yang menetapkan basis adalah bidangnya, dan nol di depan hanyalah digit nol. Di luar itu bergantung pada bahasanya — C dan Python 2 membaca 0755 sebagai oktal, yaitu 493; Python 3 menolak penulisan itu dan meminta 0o755; YAML 1.1 membacanya sebagai 493; JSON memperlakukannya sebagai galat sintaksis.
- Bagaimana cara mengubah oktal ke heksadesimal?
- Lewat biner, karena tak ada jalan yang lebih pendek: tiga bit per digit oktal, empat per digit heksadesimal, dan keduanya tak pernah sejajar. Kembangkan tiap digit oktal menjadi tiga bitnya, kelompokkan ulang seluruh rangkaian per empat mulai dari kanan, dan baca tiap kelompok empat sebagai digit heksadesimal — 755 menjadi 111 101 101, lalu 0001 1110 1101, lalu 1ed.
Alat terkait
- Konverter ukuran bita
Bilangan yang sama dibaca sebagai jumlah penyimpanan, bukan sebagai pola bit: halaman itu mengubah jumlah bita menjadi KB, MB, dan GB berdampingan dengan KiB, MiB, dan GiB, serta menunjukkan di mana kedua sistem itu berbeda.
- Kalkulator persentase
Basis menyatakan bagaimana bilangan ditulis; persentase menyatakan seberapa besar ia di samping bilangan lain. Halaman itu menghitung bagian, perubahan, dan hitungan balik, lengkap dengan rumus berisi angka Anda sendiri.