Apakah sistem heksadesimal itu?

13

Apa itu sistem heksadesimal dan mengapa ia digunakan begitu banyak dalam komputasi? Saya tahu bahwa komputer menggunakan 0s dan 1s untuk menyimpan data, jadi mengapa kita menggunakan heksadesimal?

Justin Krejcha
sumber
13
Jika bukan di luar topik, bagaimana pertanyaan mendasar seperti itu bukan duplikat 5 tahun setelah dimulainya Pengguna Super?
Peter Mortensen
3
@PeterMortensen Bahkan lebih aneh, itu bahkan belum ditanyakan pada salah satu situs saudari, setidaknya, bukan yang bisa saya temukan.
Nzall
9
Mungkin itu tidak perlu ditanyakan karena Wikipedia memiliki jawaban yang cukup bagus: en.wikipedia.org/wiki/Hexadecimal
Piers Myers
4
Mengapa begitu banyak upvotes?
Vi.

Jawaban:

31

Heksadesimal adalah sistem bilangan yang sangat umum dalam komputasi. Anda mungkin pernah mendengar biner sebelumnya, yang hanya memiliki 1 dan 0.

Manusia kebanyakan menggunakan sistem desimal (basis 10), di mana kita memiliki 10 angka:

0, 1, 2, 3, 4, 5, 6, 7, 8 dan 9

Padahal, komputer tidak beroperasi menggunakan sistem desimal. Mereka memiliki status biner (sesuatu benar atau salah) dan karena itu beroperasi di basis 2 (angka biner biasanya diawali 0b) dengan angka hanya 0 dan 1.

Pada hari-hari sebelumnya, oktal (atau basis 8) digunakan. Itu bagus karena "10" dalam basis 8 adalah "0b1000" dalam biner (10 dalam desimal adalah 1010 dalam biner). Oktal biasanya diawali "0o" saat menulis angka (tetapi diawali hanya '0' dalam sebagian besar bahasa pemrograman). Ini disebut basis 8 karena kami memiliki delapan angka.

Oktal masih digunakan hari ini, sebagian besar ketika mengatur izin di Unix dan Linux

Seiring berjalannya waktu, kami membutuhkan cara yang lebih mudah untuk mewakili angka yang lebih besar, karena daya komputasi dan ruang meningkat dengan cepat. Itu menjadi standar untuk menggunakan heksadesimal , atau basis 16, karena 16, seperti 8 adalah kekuatan 2, yang membuatnya mudah untuk melakukan konversi digit-demi-digit (lihat komentar ini. Karena ada 16 angka, huruf digunakan untuk angka lainnya. Juga, hex biasanya diawali dengan 0x.

Bilangan hex juga berguna karena bilangan hex adalah 4 bit (1 angka oktal dapat mewakili 2), dan karenanya dua angka dalam satu byte. Di sebagian besar editor hex , ini adalah bagaimana byte diwakili.

Perhitungan

Di basis 10, kami memiliki 10 angka. Setelah jam 9, apa yang harus kita lakukan? Kami kehabisan angka. Kami membuat tempat "puluhan" di sebelah kiri nomor asli, memiliki angka 1 dan yang paling kanan menjadi 0. Hal yang sama terjadi dalam heksadesimal juga:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, dll

Sampai kita mencapai 0x1F, dan kemudian proses berulang hingga 0xFF (255 dalam desimal) dan kemudian kita mendapatkan 0x100. Informasi lebih lanjut tentang penghitungan dapat ditemukan di sini .

Berikut adalah bagan yang menunjukkan konversi antara desimal, heksadesimal, oktal, dan biner: Grafik Konversi Heksadesimal

Justin Krejcha
sumber
21
Manfaat utama adalah bahwa, karena 16 adalah kekuatan 2, Anda dapat melakukan konversi digit demi digit.
TRiG
2
Perhatikan bahwa banyak bahasa menggunakan 0awalan dan bukan 0ountuk angka oktal.
ysap
2
Catatan Anda tentang 16 menjadi kelipatan 2 secara tidak benar disalin dari komentar TRiG. Menjadi multi bukanlah hubungan yang relevan.
Ryan Reich
2
@ justcool393, mungkin perlu disebutkan bahwa nama untuk apa yang Anda sebut "basis 10" sebenarnya "desimal." Ini dapat membantu memperjelas hubungan antara basis 8 (oktal), basis 10 (desimal) dan basis 16 (heksadesimal).
HalosGhost
3
Arrrg. Setiap basis adalah basis 10! stale.soup.io/post/114652207/every-base-is-base-10
woliveirajr
4

Apa itu sistem heksadesimal

Sistem heksadesimal adalah sistem penomoran basis-16 yang menggunakan 16 digit ( 0123456789ABCDEF), berbeda dengan biner yang menggunakan 2 ( 01), atau desimal yang menggunakan 10 (0-9). Karena hanya ada 10 digit angka (dalam sistem kami), huruf dari A ke F digunakan untuk menggambarkan "digit # 10," "digit # 11," dll.

mengapa begitu banyak digunakan dalam komputasi

16 adalah kekuatan 2, yang membuatnya mudah untuk mengubah angka heksadesimal menjadi angka biner, dan seperti yang Anda catat, "komputer menggunakan 0s dan 1s untuk menyimpan data." Karena setiap digit menyimpan tepat 4 bit data, digit heksadesimal dapat dikonversi menjadi 4 digit biner (1 bit) dengan sangat mudah, dan sebaliknya.

| hex bin  | hex bin  |
| 0   0000 | 8   1000 |
| 1   0001 | 9   1001 |
| 2   0010 | A   1010 |
| 3   0011 | B   1011 |
| 4   0100 | C   1100 |
| 5   0101 | D   1101 |
| 6   0110 | E   1110 |
| 7   0111 | F   1111 |

kenapa kita menggunakan heksadesimal

Itu membuatnya lebih mudah daripada biner untuk mewakili angka besar. Hanya dua digit heksadesimal yang dapat mewakili 256 nilai berbeda, seperti pada:

dec  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...

Empat digit hex dapat mewakili nilai 65536, dan seterusnya. Hex membuatnya lebih mudah untuk memeriksa data dengan sesuatu yang disebut hexdump , karena huruf, angka, dan tanda baca disimpan dalam format yang memetakan setiap karakter ke angka antara 0 dan 256 (disebut ASCII , atau kadang-kadang menggunakan pengkodean lainnya). Selain itu, banyak format file lainnya (seperti PNG) dirancang sehingga setiap bagian informasi yang terdiri dari file berisi 256 bit.

Singkatnya, 16 adalah kekuatan 2 dan 256 adalah kekuatan 16. Ini membuatnya menjadi cara yang bagus untuk mewakili angka biner dan teks atau data lainnya.

Gagang pintu
sumber
2

Apakah sistem heksadesimal itu?

Jika Anda memiliki nomor abcd maka ini setara dengan ((a * + b) + c) + d. Jadi ini seperti:

  • abcd (biner) = ((a * 2 + b) * 2 + c) * 2 + d
  • abcd (oktal) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (desimal) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (heksadesimal) = ((a * 16 + b) * 16 + c) * 16 + d

Dalam sistem heksadesimal, Anda membutuhkan 16 digit, tetapi kami hanya memiliki sepuluh digit (0..9). Jadi untuk 6 digit yang hilang, karakter A..F digunakan dengan A = 10, ..., F = 15.

Tentu saja Anda juga bisa memikirkan banyak sistem angka lainnya, misalnya dengan basis 5 atau 7.

Untuk perhitungan dengan angka, tidak masalah basis mana yang Anda gunakan. Anda dapat menambahkan dan mengalikan dalam sistem biner, Anda dapat melakukannya dalam sistem desimal dan Anda dapat melakukannya dalam sistem heksadesimal. Kami digunakan untuk menghitung dalam sistem desimal, komputer melakukannya dalam sistem biner.

Mengapa sistem heksadesimal banyak digunakan dalam komputasi?

Seperti yang dikatakan di atas, tidak masalah di sistem nomor mana Anda memberikan nomor. Angka yang mendasarinya sama, hanya representasi yang berubah. Komputer secara internal akan selalu menyimpan dan menggunakan (misalnya menghitung dengan) angka dalam biner.

Jadi mengapa programmer (seperti saya) menggunakan sistem angka yang berbeda? Ada dua alasan untuk memilih sistem angka berdasarkan kekuatan 2. Pertama adalah kependekan dan yang kedua adalah pandangan yang baik dari bit yang ditetapkan.

Kependekan

Jika saya memiliki fungsi yang menulis konten buffer ke konsol maka saya bisa menulis kode yang dicetak dalam desimal, yaitu 1 hingga 3 digit (desimal: 0..255). Jika saya menulis angka dalam format biner maka saya akan menghasilkan 1 hingga 8 digit (biner: 0..11111111). Saya juga bisa menggunakan sistem oktal dan berakhir dengan 1 hingga 3 digit (oktal: 0..377) atau heksadesimal dengan 1 hingga 2 digit (heksadesimal: 0..ff).

Ini hanya untuk satu byte. Sekarang mari kita asumsikan Anda ingin menulis nomor 32 bit:

  • biner: 0..1111111111111111111111111111111111
  • oktal: 0..3777777777777
  • desimal: 4294967295
  • heksadesimal: 0..ffffffff

Seperti yang Anda lihat, output heksadesimal adalah yang terpendek.

Melihat bit

Pola umum untuk menyimpan informasi yang dikemas adalah menggunakan setiap bit dalam satu byte secara individual. Mari kita ambil contoh atribut file (lihat MDSN ). Anda ingin atribut "tersembunyi", "arsip", "hanya baca", "sementara" dan lainnya. Anda bisa menyimpan setiap atribut dalam satu byte atau Anda bisa mengemas informasi menjadi satu byte (atau beberapa byte) di mana setiap bit mewakili tepat satu atribut. Jika Anda melihat atribut dwFlagsAndAttA dalam artikel MSDN, Anda dapat melihat bahwa Windows menggunakan pola ini.

Tetap di halaman MSDN mari kita ambil FILE_ATTRIBUTE_ENCRYPTEDsebagai contoh, bendera ini desimal 16384 dan 0x4000 heksadesimal. "0x" terkemuka hanyalah konvensi programmer C untuk menandai angka heksadesimal, jadi kita hanya akan melihat 4000. Ketika Anda ingin tahu bit mana yang diset, maka Anda harus mengubah 16384 menjadi biner terlebih dahulu - tidak ada yang bisa Anda lakukan biasanya dilakukan dengan aritmatika mental. Tapi mari kita ambil heksadesimal 4000. Ini cukup mudah. 16 adalah 2 * 4, jadi setiap angka heksadesimal persis 4 bit. Untuk itu kita baru mengkonversi 4 ke biner 0100 dan nol ke biner 0000 dan kita selesai.

Seringkali ini bukan tentang bit individu tetapi programmer cenderung untuk menyelaraskan hal-hal dengan kekuatan 2. Kami suka memuat program tidak ke alamat acak tetapi ke alamat dengan 16 bit paling tidak signifikan yang diatur ke nol. Dengan begitu jika Anda memiliki alamat 0x12345678 Anda dapat dengan mudah melihat bahwa alamat ini milik program yang dimuat ke 0x1234 dan bukan milik orang yang dimuat ke 0x03810000.

Lebih suka biner, oktal atau heksadesimal?

Itu adalah pertanyaan tentang rasa. Jika Anda ingin secara langsung melihat bit biner mungkin baik-baik saja. Untuk angka-angka panjang, biner mungkin membuat frustasi jika Anda harus menghitung digit untuk melihat apakah bit 23 atau bit 24 diatur. Ini lebih mudah dengan heksadesimal karena setiap digit mewakili 4 bit, sehingga Anda memiliki lebih sedikit penghitungan. Secara pribadi saya jarang menggunakan oktal. Ini sangat jarang.

Tapi mengapa tidak menggunakan basis 32?

Basis 32 adalah kekuatan 2, ini hebat. Tetapi Anda membutuhkan 32 digit seperti 0..9, A..V. Ini lebih banyak digit untuk diingat (dapatkah Anda dengan mudah menemukan nomor 'S' mana yang akan ditanggapi?). Peringatan lain adalah bahwa dengan basis 32 Anda kehilangan fitur bagus bahwa dua digit heksadesimal tepat satu byte, yang sangat berguna jika Anda melihat isi memori! Juga dengan basis 32 Anda masih membutuhkan 2 digit untuk mewakili nilai yang bisa dimiliki oleh satu byte. Untuk nilai 32 bit, Anda hanya perlu 7 digit, bukannya 8 digit heksadesimal, tetapi itu tidak terlalu berarti dengan kelemahan sistem base 32.

Werner Henze
sumber
1

Sistem representasi angka yang berbeda yang digunakan saat ini adalah (= termasuk):
biner, oktal, desimal, dan heksadesimal.
Yang mana untuk dipilih seringkali tergantung pada kemudahan penggunaan untuk tugas yang dihadapi.

biner digunakan dalam sistem komputer dan teknologi digital secara umum, karena mudah direpresentasikan dalam elektronik; fungsi untuk nomor basis-2 mudah dibangun, seperti representasi on / off, true / false, atau informasi dua-negara berulang serupa lainnya.

oktal bagus untuk dimiliki jika ada kelompok tiga digit biner, misalnya seperti halnya dalam pengaturan izin di Unix / Linux.

melewatkan desimal untuk sesaat, heksadesimal bagus dalam cara yang sama seperti oktal tetapi untuk empat digit biner, dan fakta bahwa 8 bit, satu byte, cocok dengan baik menjadi dua digit heksadesimal. ( = jawabannya )
Dari ini mengikuti bahwa kelompok-8-bit-bahkan dalam komputer mudah ditulis, diwakili dan dipahami - yaitu; sangat nyaman digunakan sehari-hari ketika menulis perangkat lunak, menangani data (misalnya nilai warna rgb dalam HTML / CSS), membentuk struktur data dan hal lain yang serupa.

desimal . Orang dapat menebak bahwa sistem desimal berkembang dari fakta bahwa kita memiliki sepuluh jari tangan dan kaki. Satu digit mewakili jumlah item yang dihitung, satu untuk setiap jari hingga maksimum sepuluh.

Ini mewakili sistem bilangan dengan basis:
2, 8, 10 dan 16.

Umumnya pangkalan memberi tahu berapa banyak "item" tunggal yang dapat Anda hitung, misalnya biner memiliki dua, desimal memiliki sepuluh.
Karena heksadesimal memiliki 16 item angka tunggal, sistem memerlukan 16 "angka", oleh karena itu menggunakan 0-9 dan af (6 ekstra, dibandingkan dengan desimal), di mana "a" sama dengan 10 dan "f" sama dengan 15 dalam sistem desimal.

Untuk melanjutkan dengan mode umum: setiap basis 2 atau lebih tinggi berfungsi serta apa pun, selama Anda memiliki representasi satu digit yang bagus.

Angka dalam desimal dibentuk oleh:

... d * 10³ + c * 10² + b * 10¹ + a * 10⁰

untuk angka desimal "dcba" - dengan d, c, b, a, diambil dari 0123456789

Sekarang ubah itu menjadi:

... d * basis³ + c * basis² + b * basis¹ + a * basis⁰

dan Anda memiliki bentuk yang lebih umum yang menunjukkan bagaimana setiap pangkalan 2 atau lebih tinggi "berfungsi";
misalnya lima digit, basis 5 dapat sama nyamannya dengan yang lain di atas, atau mengapa tidak 12 digit (satu lusin) sistem untuk waktu (12 jam = "10" basis 12, dengan "desimal" pertama yang memberi tahu 1/12 [5 menit] dari satu jam itu)

Catatan: ⁰¹²³ - superscript 0123 jika layar Anda menunjukkan sesuatu yang lain

Hannu
sumber
Saat ini ini mungkin menjadi 'rintisan' dari apa yang sebenarnya bisa terjadi.
Hannu