Apa Hex?

Saya harus sedikit ilmu tentang ini.

Ada adegan di awal Mars (2015) di mana karakter Matt Damon, Mark Watney, yang diduga mati oleh rekan-rekannya dan terdampar di planet merah setelah badai hebat, menghidupkan kembali probe Pathfinder yang telah mati untuk berkomunikasi dengan NASA. Sementara probe mampu mengirim gambar kembali ke Bumi, NASA terbaik yang bisa dilakukan dengan probe jarak jauh adalah mengubah posisi kamera onboard-nya.

Watney menyadari bahwa rotasi kamera 360 derajat akan memungkinkan tim NASA untuk mengeja pesan kepadanya huruf demi huruf jika dia bisa memberikan mereka alfabet untuk mengarahkan kamera penyelidikan. Solusi itu menghadirkan masalah lain. Alfabet latin memiliki 26 karakter dalam bahasa Inggris, yang berarti mereka harus cukup berdekatan dalam lingkaran di sekitar probe dan sangat mungkin bahwa dia akan mengalami kesulitan untuk membedakan huruf mana yang ingin ditunjukkan oleh probe.

"Itu bukan alfabet kami. 26 karakter ditambah kartu pertanyaan ke 360 ​​memberi kita 13 derajat busur. Itu terlalu sempit. Saya tidak pernah tahu apa yang ditunjukkan kamera ... Hexadecimal untuk menyelamatkan. "

Jadi alih-alih Watney menyelesaikan masalah dengan menggunakan hexadecimal dan tabel ASCII untuk menguraikan pesan kode dari NASA, dan sebelum Anda tahu ia mampu berbicara dengan Bumi lebih dari sekadar pertanyaan ya / tidak.

Roll kredit

…tunggu apa?

Anda tahu Anda sedang mengerjakan matematika kompleks ketika mulai menggunakan huruf.

Saya akui hanya sedikit memahami apa yang terjadi dalam adegan ini saat pertama kali saya menonton film ini. Dalam sebuah film dengan beberapa konsep ilmiah yang cukup maju, pemandangan ini muncul di benak saya karena sepertinya ide yang cukup sederhana yang tetap menguasai pikiran saya. Rupanya sutradara Ridley Scott mengalami kesulitan dalam menggambarkan adegan ini karena dia tidak memahami konsep itu sendiri.

Saya sedang belajar pemrograman sekarang, dan saya menyadari bahwa bahkan jika bahasa tingkat tinggi seperti Ruby atau Javascript bisa sulit dikuasai, mereka masih cukup jauh dari kode mesin dasar yang menggerakkan komputer berdasarkan murni pada 1 dan 0 . Tingkat pemrograman yang rendah itu selalu mengintimidasi saya, dan mungkin merupakan alasan utama saya memiliki sedikit minat dalam ilmu komputer sebagai bidang karir setengah kehidupan yang lalu, sebelum pemrograman menjadi profesi yang lebih mudah diakses. Tetapi sejak saya mulai menjadi pengembang 6 minggu yang lalu, saya telah belajar bahwa Anda dapat memecah tindakan / konsep kompleks menjadi ukuran yang dapat dikelola jika Anda hanya melangkah melewatinya sepotong demi sepotong.

Jadi mari kita mulai dengan kata heksadesimal. Ini berasal dari hex Yunani yang berarti 6, dan desimal, yang berasal dari latin decimus, yang berarti kesepuluh. Hexadecimal adalah sistem numerik yang menggunakan 16 sebagai basisnya, bukannya 10 seperti halnya dengan desimal "normal".

Sekarang jika Anda menjelaskan sistem bilangan base10 kepada seseorang yang belum pernah melakukan aritmatika sebelumnya, Anda harus terlebih dahulu menjelaskan mengapa menguntungkan menggunakan sistem numerik terlebih dahulu. Lagi pula, kita bisa dengan mudah menggunakan garis miring sederhana ("\") untuk menunjukkan jumlah objek. Sebagai contoh, satu ikan dapat direpresentasikan sebagai \ ikan, dua ikan sebagai \ ikan, tiga ikan sebagai \ ikan, dan seterusnya. Secara teori, Anda bisa mewakili jumlah ikan apa pun hanya dengan menggunakan satu karakter. Namun dalam praktiknya, ini menjadi tidak terkelola begitu Anda masuk ke dalam jumlah besar ikan. Bahkan lima puluh ikan menjadi tebasan tali yang panjangnya tak terlihat.

\\\ 's \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ itulah ikan
Ikan tidak memiliki rentang memori jangka pendek untuk memahami sebanyak itu, dan Anda juga tidak.

Menggunakan sistem desimal base10, kita dapat dengan mudah mewakili jumlah ikan 1.000 kali lebih besar dari garis miring di atas menggunakan sepersepuluh dari jumlah ikan. Kita harus menggunakan beberapa simbol lebih dari satu tebasan sederhana, tetapi tradeoff dalam efisiensi sepadan. Faktanya, ini sangat efisien, sehingga kita hanya perlu kombinasi dari dua simbol ini untuk mewakili 50 ikan di atas.

Digit dalam sistem base10 adalah:

0 1 2 3 4 5 6 7 8 9

dimana

0 =
1 = \
2 = \\
3 = \\\
4 =
5 =
6 = \ \
7 = \\ \\
8 = \\\\
9 = \\\\

Jadi, ikan bisa ditulis sebagai 4 ikan sebagai gantinya, mengambil sebagian kecil dari ruang. Setelah kami mencapai jumlah yang lebih besar dari 9, kami harus memulai dari awal dengan 1 dan menambahkan digit pengganti, 0.

10 = \\\\

Sekarang, untuk mewakili jumlah yang lebih besar dari 10, seperti 4 lebih besar dari 10, kami hanya menggabungkan angka 10 dan 4 untuk menghasilkan 14

10 = \\\\
4 =
14 = \\\\

Setelah kami mencapai 9 lagi, kami hanya mengulang dan menambah digit pertama dengan satu.

...
17
18
19
20
21
...

Kita dapat mengikuti pola ini sampai 99, di mana kita dapat memulai pola lagi dengan 10 dan 0: 100 tambahan. Jadi dalam sistem desimal berdasarkan 10 setiap tambahan 0 ditambahkan ke kanan membuat angka 10 kali lebih besar dari yang sebelumnya.

10 * 1 = 10
10 * 10 = 100
10 * 100 = 1000
10 * 1000 = 10.000
...

Jadi mengapa base16?

Jelas suatu sistem yang menggunakan sepuluh digit sangat masuk akal jika Anda telah menggunakan satu angka sepanjang hidup Anda, dan itu sangat intuitif mengingat bahwa kita semua dilahirkan dengan dua set lima jari untuk mengandalkan (kata digitus dalam bahasa latin berarti 'jari', setelah semua), dan jadi kita terbiasa mempertimbangkan kelipatan sepuluh dalam kelompok lima.

Ketika datang ke data yang disimpan di komputer, kelipatan 5 hampir tidak berguna. Pada dasarnya, sebuah sirkuit komputer dapat eksis di salah satu dari dua keadaan: mati atau hidup, dan semua kode komputer pada dasarnya adalah biner (lat. Binarius "terdiri dari dua"). Pengelompokan data terkecil yang mungkin dalam sistem biner adalah bit (digit biner), yang dapat disusun menjadi kelompok 8 yang disebut byte. Karena bit tunggal dapat memiliki dua nilai yang mungkin (0 atau 1), byte dapat menyimpan 16 status yang mungkin.

0 atau 1 (2)
0 atau 1 (4)
0 atau 1 (6)
0 atau 1 (8)
0 atau 1 (10)
0 atau 1 (12)
0 atau 1 (14)
0 atau 1 (16)

Dengan masing-masing 8 bit yang memiliki 2 kemungkinan keadaan, ada total 256 (2⁸) kemungkinan kombinasi yang dapat disimpan dalam satu byte.

https://cs.stackexchange.com/questions/19568/how-can-one-byte-hold-256-possibility

Jika Anda memetakan 256 nilai yang mungkin ke sistem desimal, Anda akan membutuhkan tiga digit.

Biner Desimal
00000000 000
00000001 001
00000010 002
00000011 003
....
01100011 009
....
11111111 255

Jadi itu mungkin, tetapi seperti dengan contoh penghitungan ikan dengan tanda garis miring, ini bukan sistem yang paling efisien jika unit dasar kami adalah satu byte tunggal. Menggunakan sistem desimal base16, kita dapat merepresentasikan kemungkinan kombinasi bit dari satu byte hanya menggunakan 2 digit heksadesimal. Kita harus menggunakan beberapa simbol lebih banyak daripada dalam sistem desimal, tetapi untuk tujuan efisiensi dan skalabilitas dan keterbacaan terhadap manusia itu layak dilakukan.

Digit heksadesimal adalah:

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

dimana

Hex Des
 0 = 0
 1 = 1
 2 = 2
 3 = 3
 4 = 4
 5 = 5
 6 = 6
 7 = 7
 8 = 8
 9 = 9
10 = A
11 = B
12 = C
13 = D
14 = E
15 = F

Jadi 10 dalam desimal dapat ditulis sebagai A dalam hex, menghemat tempat digit. Setelah kami mencapai jumlah yang lebih besar dari hex F (15 Desember), kami harus memulai dari awal dengan 1 dan digit pengganti, 0.

Hex Des
16 = 10

Sekarang, untuk merepresentasikan kuantitas yang lebih besar dari 16, seperti 4 lebih besar dari 16 (20 dalam desimal), kami hanya menggabungkan digit hex 10 dan 4 untuk membuat hex 14.

Hex Des
16 = 10
 4 = 4
Hex Des
20 = 14

Setelah kami mencapai hex 1F (31 dalam desimal), kami hanya mengulang dan menambah digit pertama dengan satu.

Hex Des
...
 28 = 1D
 29 = 1E
 31 = 1F
 32 = 20
 33 = 21
 34 = 22
...

Kita dapat mengikuti pola ini sampai hex FF, di mana kita dapat memulai pola lagi dengan 10 dan 0: hex 100 (256 dalam desimal) ekstra. Setiap 0 tambahan yang ditambahkan ke kanan membuat angka 16 kali lebih besar dari yang sebelumnya.

Hex Dec
10 * 1 = 10 16 * 1 = 16
10 * 10 = 100 16 * 16 = 256
10 * 100 = 1000 16 * 256 = 4096
10 * 1000 = 10.000 16 * 4096 = 65536
10 * 1000 + 1 = 10001 16 * 4096 + 1 = 65536
...

#bawa dia pulang

Jadi kembali ke Mars - dengan menggunakan heksadesimal alih-alih huruf-huruf alfabet, karakter Matt Damon dapat mengurangi jumlah kemungkinan digit yang dapat ia terima dari Bumi hingga 10, dan lebih mudah mengenali posisi kamera.

Bagan ini juga termasuk oktal.

Kode yang dipancarkan NASA berasal dari tabel ASCII (kiri), di mana setiap nilai heksadesimal (merah) antara 0 dan 7F (0-127 dalam desimal) memetakan satu karakter. Untuk mendekode pesan, yang harus dilakukan Watney adalah mencocokkan nilai hex dengan huruf-huruf alfabet dalam tabel.

48 4F 57 41 4C 49 56 45
H O W A L I V E

Yang pada dasarnya semua komputer lakukan ketika membaca dan menampilkan data.

Sebagai bonus tambahan, dengan semua ruang yang disediakan oleh hanya 7 bit, tabel ASCII juga termasuk tanda baca (!), Sehingga NASA dapat mengirimkan garis kode yang memungkinkan Watney untuk menghubungkan pemancar Pathfinder ke perangkat lunak komunikasi yang lebih kuat dari penjelajah Mars rover. . Hexadecimal untuk menyelamatkan.

Tabel ASCII (Kode Standar Amerika untuk Pertukaran Informasi) asli dikembangkan di AS pada 1960-an dan awalnya hanya membutuhkan 7 bit untuk disimpan. Sebagian besar pengkodean teks modern menggunakan 8 bit tetapi didasarkan pada kerangka asli, dan sistem masih digunakan sampai hari ini. Bahkan jika Anda bukan seorang programmer, Anda pasti melihat hexadecimal yang digunakan di browser web Anda dalam url seperti: http://www.example.com/this%20is%20an%20example

di mana% 20 (hex 20) memetakan ke karakter [spasi] di grafik ASCII, karena url tidak dapat menerima spasi kosong dan karakter lain.

Tempat lain di mana Anda akan melihat hexadecimal sebelumnya adalah ketika memilih warna dalam perangkat lunak apa pun yang memungkinkan penyesuaian warna untuk nilai RGB.

Hari-hari indah.

RGB adalah singkatan dari warna primer: merah, biru, dan hijau. Pada hari-hari awal komputasi, tiga bit (0 atau 1) dapat menyimpan nilai salah satu dari 8 (3²) kombinasi warna yang mungkin, di mana 000 menciptakan hitam (tanpa warna), 111 memberi Anda warna putih (semua warna digabungkan), dan Enam warna lainnya dihasilkan dari kombinasi keduanya.

Fakta bahwa warna hanyalah perbedaan panjang gelombang dalam cahaya adalah posting blog untuk hari lain.

Dengan meningkatkan kedalaman bit menjadi 8 byte (24-bit), setiap nilai warna R, G, atau B dapat menyimpan 256 level yang mungkin dalam satu byte, memungkinkan untuk 16.777.216 (2²⁴) warna yang memungkinkan. Itu menambahkan hingga delapan digit yang tidak berarti dalam desimal10, tetapi setiap satu dari enam belas juta kombinasi warna dapat dijelaskan dalam format yang dapat dibaca manusia menggunakan hanya 3 pasang digit heksadesimal:
Hitam = # 00000
Merah = # FF0000
Biru = # 00FF00
Hijau = # 0000FF
Putih = #FFFFFF

Merupakan kebiasaan untuk menyingkat nomor ketika dua digit berulang, sehingga nilai hex untuk # kuning kuning FFCC00 juga dapat ditulis sebagai # FC0.

Itu 16.763.904 dalam desimal10, untuk perbandingan.

Semoga postingan ini memiliki demistified hexadecimal untuk Anda; Saya tahu meneliti topik ini lebih jauh telah membuat ilmu komputer tampak jauh lebih tidak menarik bagi saya, semua terinspirasi oleh pemenang 2015 untuk Komedi Terbaik dan / atau Musikal.