Mengapa belajar heksadesimal? [Tutup]

28

Saya telah mengambil beberapa kelas pemrograman intro di hari saya, kebanyakan hanya untuk mendapatkan kaki saya basah di setiap jenis pemrograman yang saya temukan. Tidak mengherankan, hampir setiap kelas berjalan melalui format yang sama: intro ke perangkat keras, intro ke perangkat lunak, dan kemudian Anda masuk ke pemrograman yang sebenarnya. Sementara memahami bagaimana perangkat keras dan perangkat lunak bekerja sangat penting, saya selalu bingung dengan satu topik yang telah ada di setiap kursus.

Di bagian intro ke perangkat lunak yang saya temukan, tanpa gagal, mereka selalu menekankan pada melek huruf dalam biner, heksadesimal, dan kadang-kadang bahkan sistem angka oktal. Saya mengerti bahwa memahami hal-hal ini baik, dan bagaimana komputer menafsirkannya, tetapi saya tidak pernah menemukan diri saya benar-benar perlu tahu cara membaca dan menulis salah satu dari sistem angka itu. Sungguh, satu-satunya waktu saya melihat sesuatu selain base 10 adalah untuk warna dalam CSS, yang bahkan lebih mudah jika Anda menggunakan sesuatu seperti www.colorpicker.com

Pernahkah saya mengabaikan penggunaan luar biasa dari sistem bilangan non-basis-10 ini di dunia pemrograman, atau hanya tradisi lama untuk memasukkan bagian-bagian ini di semua buku teks pemrograman? Apakah ada yang punya contoh yang baik di mana programmer rata-rata akan benar-benar menggunakan angka oktal?

jwegner
sumber
1
Apakah ada yang punya contoh yang bagus di mana programmer rata-rata akan benar-benar menggunakan angka oktal? Ya, jika Anda menemukan diri Anda menulis perangkat lunak yang terkait dengan industri Penerbangan maka Anda mungkin akan menemukan kode Transponder, yang merupakan angka oktal 4 digit. en.wikipedia.org/wiki/Transponder_%28aviation%29
Ben Cottrell

Jawaban:

14

Semua jawaban baik tetapi mereka tidak membahas apa yang saya pikir adalah bagian paling berharga. Belajar untuk "Berpikir" di pangkalan yang berbeda membuat Anda jauh lebih fasih dengan cara komputer menangani angka.

Jika Anda ingin menyimpan serangkaian huruf kecil yang dikemas dengan cukup baik, bagaimana Anda akan melakukannya?

Nah, ada 26 huruf kecil, yang diterjemahkan dengan mudah menjadi rentang 0-31 yang merupakan angka 5-bit, Anda dapat mengemas 6 angka 5-bit ke dalam bidang 32 bit (int?) Dan bahkan memiliki sisa yang cukup untuk beberapa tanda baca.

Saya tidak mengatakan hex membantu dengan hal-hal seperti ini, tetapi memahami bagaimana angka dikonversi.

Kasus lain, setiap kali Anda menggunakan basis-64 untuk melewatkan angka yang agak panjang di ascii. Apakah Anda tahu cara menerapkan ini? Mengapa menerapkannya seperti itu? Apakah Anda bahkan menyadari bahwa itulah yang Anda ketikkan setiap kali Anda mengetik "CD KEY" ke dalam kotak pendaftaran game?

Juga, untuk bersenang-senang, bermain-main dengan base 12 untuk sementara waktu. Matematika ternyata benar-benar menarik di basis 12 (basis 10 bodoh dalam perbandingan, saya berharap kita telah berevolusi dengan 6 jari - kita bisa berpuluh-puluh tahun ke depan dalam pemahaman kita tentang matematika). Beberapa manusia purba yang sangat cerdas menggunakan basis 12 untuk mengembangkan jam.

Dalam basis 10 kami memiliki 3 angka "Keren" yang membuat pola mudah, 2, 5 dan 9 dengan 8, 6 dan 4 sebagai angka dingin "Kecil". Dalam basis 12 Anda memiliki 2,3,4,6,11 sebagai angka "Dingin" dengan 8,9 dan 10 sebagai angka dingin "Kecil", artinya jika kita menggunakan basis 12 kita akan jauh lebih baik dalam mengenali pola dalam angka karena kita akan melihat mereka sepanjang waktu.

Juga, biner. Anda dapat mengandalkan satu tangan ke 32 - Saya melakukannya sedikit, berguna kadang-kadang ketika menghitung sampai 5 hanya tidak memotongnya :)

Biner sangat menyenangkan, tetapi tidak diterjemahkan dengan baik. Ketika Anda menjadi baik dengan hex, Anda mulai melihat "A" sebagai 1010 dan "5" sebagai 0101, dan hal-hal ini mulai sangat penting. Jika Anda memiliki bitfield yang ingin Anda ekstrak bit ke-6: 00100000, dengan apa Anda "dan" itu? Anda hanya perlu tahu bahwa ini 0x20.

Jika Anda melihat kode yang ands sesuatu dengan 0x0600 bit mana yang sedang diekstraksi? Anda harus tahu tanpa memikirkannya - Anda harus benar-benar membaca seolah-olah itu ditulis 0000011000000000 (tetapi lebih mudah dibaca karena Anda tidak perlu menghitung nol).

Mengapa Anda ingin membatasi otak Anda dan kemampuannya untuk memproses data?

Bill K
sumber
Sebenarnya, jam dikembangkan di base60 .
Denis de Bernardy
@Denis Saya mendapat kesan bahwa teori saat ini adalah bahwa teori itu dikembangkan oleh orang-orang yang menghitung di basis dua belas yang kalah oleh orang-orang bodoh yang tidak bisa berpikir lewat jari mereka. 60 adalah hanya 12 divisi yang dibagi lagi menjadi kelompok-kelompok 5 dan sepertinya seperti retas oleh basis 10 mendengus :)
Bill K
Mungkin. Sejujurnya, aku sama sekali bukan spesialis. Komentar Anda hanya membawa kembali ingatan yang sudah lama terlupakan. Saya juga ingat bahwa sudut yang diukur dalam 360 derajat berasal dari basis-60 (dan oleh penemu babylonia yang sama, pada saat itu), tetapi seperti yang Anda tunjukkan, basis-10 grunts hanya membanjiri apa yang awalnya adalah matematikawan base-12. :-) Sekarang, bayangkan jika kita menghitung di base-20, seperti yang dilakukan orang Indian Amerika. :-D
Denis de Bernardy
44

Apa yang harus dipelajari? Anda perlu memahami basis angka yang berbeda untuk menjadi programmer yang kompeten, tetapi mengenai hex ada sedikit yang harus dipelajari, kecuali bahwa ABCDEF datang setelah 9.

Neil Butterworth
sumber
8
OP mungkin merujuk pada kemampuan untuk secara mental beralih ke basis 10 dari basis lain. Ini mungkin merupakan keterampilan yang berguna pada satu titik, dan mungkin masih untuk kategori tertentu dari programmer tingkat rendah, tetapi sebagian besar tidak relevan saat ini. Misalnya, Anda dapat melakukan konversi dalam vim sepele.
Rein Henrichs
Itu benar. Seharusnya aku lebih jelas.
jwegner
2
@Rein Saya tidak pernah sangat pandai melakukan itu (saya harus melakukan matematika di kepala saya), jadi saya tidak bisa mengatakannya. Namun saya dulu secara mental mampu mengubah dari hex ke bahasa assembly Z80, yang merupakan hal yang berguna untuk dapat dilakukan pada saat itu. Saya menduga kemampuan untuk memindahkan dari hex ke assembler 80x86 (atau apa pun) masih berguna untuk programmer yang bekerja hari ini.
Neil Butterworth
1
@Neil Butterworth: 8080 opcode lebih masuk akal dilihat dalam oktal, sungguh, jika ingatanku. Memori saya benar-benar kabur tentang bagaimana itu diterapkan pada ekstensi Z80 untuk itu.
David Thornley
1
@ Neil: Saya pikir bagian penting adalah instruksi register-to-register pindah, yang tampaknya 01xxxyyy dalam format bit, di mana xxx adalah tujuan dan sumber yyy. Saya tidak tahu apakah ada signifikansi oktal lainnya.
David Thornley
18

Apakah ada yang punya contoh yang baik di mana programmer rata-rata akan benar-benar menggunakan angka oktal?

Oktal? Tidak secara umum, tidak, dengan pengecualian untuk izin * nix.

Heksadesimal? Anda bertaruh. Anda mengabaikan sejumlah besar dari kita yang menyeret bit di sekitar sistem embedded, melihat protokol atau format file pada tingkat bit, dan sebagainya. Tapi tentu saja, jika Anda jauh dari logam melakukan aplikasi atau pekerjaan web, Anda mungkin lolos dengan lebih mudah.

Contoh: Konfigurasi register pada mikrokontroler dan sejenisnya.

Ambil nomor 54312, diambil dengan kunci tinju secara acak. Bisakah Anda tahu bit mana yang diatur? Saya tidak bisa, paling tidak dari atas kepala saya. Setara heksadesimal maka, itu 0xd428. Bahwadi sisi lain, segera beri tahu saya bahwa pola bit yang saya lihat adalah 1101 0100 0010 1000. Lebih terstruktur secara logis untuk hal semacam itu, dan Anda mendapati diri Anda membutuhkan ini sepanjang waktu ketika Anda dekat dengan logam. Katakanlah angka di atas adalah apa yang saya dapatkan di reset dari mcu, dan saya perlu bit 7 dan 9 yang ditetapkan untuk beberapa alasan. Dalam hex, saya dapat dengan mudah melihat bahwa angka yang dihasilkan harus 0xd6a8, tetapi dalam desimal? Itu 54952, jauh dari intuitif jika Anda bertanya kepada saya. Tentu, ini soal menambahkan nilai 640, tetapi lebih sulit untuk diketahui. Tentu saja, dalam praktiknya, orang mungkin hanya menggeser bit ke posisi yang benar dan ATAU yang dengan nilai asli, tetapi Anda mungkin masih ingin tahu apa representasi akhir itu.

n42
sumber
1
Macam apa yang mendorong pertanyaan "mengapa saya harus peduli bit mana yang ditetapkan?" Untuk beberapa (banyak? Sebagian besar?) Aplikasi ini tidak relevan.
Neil Butterworth
10
Setuju - dengan asumsi kita berbicara perkembangan tingkat tinggi. Level rendah, apakah bit tertentu diatur atau dihapus tidak hanya mungkin, tetapi kadang - kadang akan menentukan apakah micro berdarah sama sekali, atau jika perangkat tertentu yang Anda butuhkan mendapatkan daya, atau jika berjalan pada kecepatan jam x daripada y . Itu baru permulaannya, dan jika Anda berurusan dengan pengembangan semacam ini, pada dasarnya, bit tunggal penting. Terkadang banyak. Tetapi sekali lagi, itu tergantung pada domain Anda, saya hanya mengatakan; Jangan lupakan dunia yang tertanam. =)
n42
1
+1 - semakin dekat ke mesin Anda semakin banyak yang Anda butuhkan untuk menggunakan pangkalan yang berbeda. Itu tidak hanya tertanam; sebagian besar bahasa memiliki bendera bit dan sering ditulis dalam hex karena alasan yang jelas. Sebaliknya itu tidak ada gunanya untuk mengajar dalam kursus pemrograman pertama, tetapi kemudian sebagian besar program pemrograman pertama cukup sia-sia. Hampir semua programmer mengajar sendiri bukan?
1
@ Nikmat: Itu karena hex lebih mudah dibaca. Saya bisa memahami nilai hex 8 digit jauh lebih cepat daripada nilai biner 32 digit.
Steve S
2
@ Steve S: Jujur, saya curiga itu karena kami sekelompok malas, juga .. 0x80 lebih pendek untuk menulis daripada 0b10000000. Tapi saya setuju. Saya juga setuju bahwa sebagian besar tidak ada artinya dalam kursus pemrograman pertama, tetapi Anda mungkin mendorongnya ke dalam matematika diskrit, pemrograman waktu nyata, organisasi komputer, dan sejenisnya.
n42
12

Apakah ada yang punya contoh yang baik di mana programmer rata-rata akan benar-benar menggunakan angka oktal?

Jika Anda mengatur izin pada file di Unix (atau Linux), Anda menggunakan angka oktal 3 digit. Digit pertama adalah izin pengguna, yang kedua adalah izin grup, dan digit terakhir adalah izin yang didapat semua orang.

Saya harus memahami fakta ini dalam kode yang saya tulis minggu lalu.

Jika Anda melihat output dari algoritma hashing standar seperti MD5, Anda akan sering menemukan mereka ditulis dalam hex. Saya telah melihat sejumlah kasus di mana ini menyebabkan aritmatika di pangkalan yang tidak biasa.

Jika Anda ingin memahami bagaimana floating point direpresentasikan secara internal, dan oleh karena itu mengapa 1/10 tidak diwakili secara tepat, Anda benar-benar perlu memahami bagaimana melakukan aritmatika di pangkalan yang berbeda. Ini adalah pengetahuan esoteris sampai hari ketika Anda menggigit Anda di belakang dan tiba-tiba Anda benar-benar perlu memahaminya dengan tergesa-gesa.

Dan ada banyak kasus lain di mana Anda akan menemukan sifat dasar biner dari data di dalam komputer yang muncul. Tentu saja jika Anda hanya menulis situs web CRUD, kemungkinan besar Anda tidak akan pernah menjumpai satupun dari mereka karena hal itu terjadi pada level yang sudah ditangani orang lain.

btilly
sumber
4
* Izin nix tidak benar oktal. Anda tidak melakukan perhitungan matematika dengan representasi ini. Paling-paling mereka adalah representasi oktal dari topeng biner.
Joel Etherton
@ Joel Etherton: Ketika Anda mendapatkan izin dari file stat, mereka masuk sebagai angka yang secara default akan ditampilkan di basis 10. Jika Anda tidak mengerti konversi ke / dari oktal, angka-angka itu sulit dipahami. Saya sedang menulis dokumentasi yang perlu menjelaskan fakta ini. Ada banyak perhitungan matematis.
btilly
@ btilly: Anda salah mengerti apa yang saya katakan. Jika Anda menetapkan izin pada file ke 755 Anda tidak perlu menambahkan ini ke apa pun. Itu hanya topeng yang menjelaskan kombinasi izin. Tentu Anda harus menyadari bahwa itu berarti (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1), tetapi ini masih hanya merupakan representasi dari topeng biner. Apa yang Anda maksud ketika Anda mengatakan "file stat"? Saya belum pernah melihat stat file untuk izin yang dikirim di basis 10 (berpegang teguh pada contoh itu).
Joel Etherton
1
@ Joel Etherton: Coba perl -le '@stat = stat(shift); print $stat[2]' some_filedan Anda akan mendapatkan stat sebagai angka di pangkalan 10. Anda harus memasukkannya ke dalam Perl chmoddengan cara yang sama. Oleh karena itu masuk akal untuk menyimpan nomor seperti itu dalam database, pada titik mana saya perlu mendokumentasikan apa yang harus dilakukan angka-angka itu dengan izin Unix yang lebih akrab. Seperti yang saya katakan, ini bukan contoh hipotetis.
btilly
@ Joel Etherton: misalkan Anda memiliki file dengan izin 419 (desimal), Anda ingin membuat file tersebut dapat dijalankan oleh pengguna, tetapi tidak dapat dibaca dunia. Bagaimana Anda perlu mengubah nomornya? Nilai yang dikembalikan dalam panggilan C stat () adalah int, bagaimana Anda memilih untuk mencetak adalah masalah lain.
Vatine
9

Mudah-mudahan, di dunia nyata, Anda tidak akan ditanyai tentang mengubah Hex menjadi biner menjadi desimal. Anda akan memiliki alat yang Anda inginkan untuk mengkonversi apa pun yang Anda inginkan.

Saya setuju Anda harus memiliki pemahaman tentang apa yang sedang terjadi, tetapi mengapa menghafal ketika Anda bisa mencarinya?

Namun, saya merasa berguna untuk mengingat angka-angka penting (untuk saya 0x64 = 100, 0xFF = 255, 0xFFFF = 65535, dll) karena mereka banyak muncul.

Bisakah saya mencari tahu apa 8675309 dalam biner, hex dan oktal? Tidak, tapi saya bisa membuka alat yang bisa kalau perlu.

Dylan Yaga
sumber
3
Anda lupa 57005, biasa digunakan sebagai constelvis = 57005;
Bevan
5

Satu-satunya hal yang pernah saya gunakan untuk oktal adalah izin file pada sistem unix.

Hex dan binary sangat berguna jika Anda melakukan pekerjaan apa pun dengan dekat dengan protokol kawat, atau dekat dengan transfer data logam. Pada dasarnya data mengalir dalam bentuk biner, yang secara sepele disajikan sebagai gigitan hex.

Anda juga akan menemukan bahwa lembar-data sering mengutip nilai hex jadi lebih baik untuk menunjukkan nilai dalam kode seperti yang muncul di lembar data.

Jika Anda banyak menggunakan keduanya, Anda cukup mahir dalam mengkonversi ke dan dari desimal di kepala Anda, setidaknya untuk nilai-nilai umum.

Semua yang dikatakan; Saya menduga penekanan yang berat sebagian besar historis. Seperti yang Anda katakan ada banyak programmer yang tidak membutuhkan apa pun selain desimal.

Luke Graham
sumber
5

Anda sebenarnya bertanya mengapa mempelajari kekuatan representasi 2 angka?

Komputer terbuat dari sirkuit , arus listrik mengalir melalui sirkuit dalam dua tingkat yang berbeda, tinggi dan rendah untuk mewakili dua tingkat arus, kami menggunakan digit biner karena mereka dapat menampung dua keadaan, baik satu (tinggi) atau nol (rendah).

Digit biner membentuk pola . Sebagai contoh, jika satu-satunya cara Anda dan saya dapat berbicara, adalah melalui rangkaian, kita dapat menetapkan bahwa jika Anda ingin mengirim saya huruf A, Anda akan mengirim saya pola biner: 1000001. Karena saya malas , Saya tidak ingin mengingat 7 tujuh digit. Sebaliknya, saya akan menggunakan kekuatan sistem penomoran 2 untuk mewakili digit biner besar menjadi yang lebih kecil. Saya bisa menggunakan 8 (2 ^ 3), atau 16 (2 ^ 4).

Seperti yang Anda lihat sebagian besar perangkat keras komputer dan perangkat lunak menggunakan representasi biner dan kami manusia menggunakan kekuatan 2 representasi seperti oktal dan heksadesimal untuk membaca representasi biner dengan cara yang lebih efisien dan tidak menyakitkan.

Sekarang contoh programmer rata-rata yang perlu memahami kekuatan 2 representasi:

  1. ASCII
  2. Unicode
  3. Memahami pemrograman manajemen memori (stack, heap, alamat memori, core dumps)
  4. Debugging
  5. Membaca data biner dilakukan sebagian besar di Hex editor.

Sekarang dua sen terakhir saya, saya sangat yakin bahwa Anda dapat belajar dengan cukup cepat kekuatan 2 representasi (karena Anda sudah mengelola kursus pemrograman intro) .. Anda mungkin lupa konversi, tetapi itu seharusnya bukan konsep asing jika Anda mau untuk menjadi programmer biasa.

Armando
sumber
3

Saya tidak pernah menggunakan oktal tetapi bukan hal yang aneh untuk melihat hex di debugger dan kadang-kadang lebih masuk akal untuk menggunakan hex dalam kode sumber Anda (biasanya, karena data yang mendasarinya adalah flag bit.)

Loren Pechtel
sumber
3

Saya tidak tahu apakah ada banyak kebutuhan akhir-akhir ini, tetapi bertahun-tahun yang lalu, ketika saya masih seorang Programmer Sistem, bisa membaca dan memahami hex sangat penting. Saya akan disajikan dengan dump penyimpanan (semua dalam hex) dan mendekode representasi hex kembali ke bahasa Assembly IBM. Setelah melakukan itu selama beberapa saat Anda akhirnya dapat melakukannya secara langsung - baca hex dan tulis setara dengan assembly. Sangat berguna untuk debugging. Menambah dan mengurangi nilai hex berguna untuk menghitung offset dari register dasar.

Saya curiga ada sedikit kebutuhan untuk itu dalam praktek sekarang, tetapi pengetahuan tentang itu hampir tidak bisa menjadi hal yang buruk.

Simon Knights
sumber
Di situlah saya memperoleh keterampilan hex saya juga. Kemudian, dipertajam ketika saya dipaksa untuk men-debug kode tanpa debugger simbolis pada VAX / VMS (kami mengirimkan kode kepada pelanggan tanpa info simbol). Saat ini, saya jarang menggunakannya, walaupun kami menyandikan beberapa info dalam URL tertentu dalam hex, dan sekali-sekali membantu untuk dapat men-decode mereka dengan cepat.
TomG
3

Ini bukan tentang menjadi "fasih" dalam membaca biner / heksadesimal, tetapi cukup nyaman sehingga Anda dapat dengan cepat melakukan konversi mental ketika Anda menjumpai mereka. Bayangkan pemrograman tanpa merasa nyaman dengan aritmatika sederhana, dan Anda harus pergi ke kalkulator setiap kali Anda perlu mengalikan dua.

Heksadesimal / biner penting karena ini adalah bahasa yang digunakan komputer. Anda akan selalu menemukannya di beberapa tempat, terutama ketika melalui latihan debugging dan data Anda dalam hex.

Saya juga akan menekankan pentingnya memahami basis-2 dalam konteks bagaimana berbagai tipe numerik diwakili secara internal, dan cara kerja aritmatika. Dengan ini, Anda akan memiliki pemahaman yang lebih baik tentang kapan dan bagaimana menangani masalah pembulatan floating point dan integer overflow, misalnya.

Sebagai satu contoh lagi, operasi bitwise dan flag bit masih lazim dalam pemrograman, dan ini adalah tempat lain di mana pemahaman tentang basis-2 adalah penting.

Scott Wegner
sumber
2

Sungguh, satu-satunya waktu saya melihat sesuatu selain basis 10 adalah untuk warna dalam CSS,

Anda belum pernah mencari karakter di bagan kode Unicode ? Belum pernah melihat URL yang ada %20di dalamnya? Tidak pernah menggunakan GUID ? Belum pernah melihat alamat IPv6 ? Tidak pernah menulis BLOBliteral dalam SQL? Pernah melihat file dalam hex editor? Ada banyak hal yang berhubungan dengan komputer yang secara konvensional dinotasikan dalam hex.

Sedangkan untuk oktal, saat ini jarang, tetapi masih digunakan untuk izin sistem file Unix.

Lihat juga: aplikasi praktis dari operasi bitwise

Bahkan jika Anda dapat menghindari melakukan pemrograman "close to the wire", tetap penting untuk menyadari fakta bahwa komputer beroperasi dalam biner, karena satu alasan sederhana: Abstraksi bocor .

The intabstraksi dalam kebanyakan bahasa kebocoran alam tetap lebarnya. Bilangan bulat meluap, dan mereka melakukannya pada angka "bulat" biner seperti 2 31 . Pemikir hanya desimal tidak akan bisa menjelaskan bug Tahun 2038 .

The float/ doubleabstraksi kebocoran radix nya 2. Jika Anda menulis 0.1, Anda benar-benar mendapatkan 0,1000000000000000055511151231257827021181583404541015625. Dan Anda akan mendapatkan bug jika Anda mengharapkan 0,1.

dan04
sumber
2

Mengenali angka-angka tertentu yang polanya sederhana di pangkalan-pangkalan lain seringkali merupakan petunjuk besar ketika memecahkan bug. Jika jawaban Anda salah pada 347, itu mungkin tidak berarti apa-apa, tetapi jika tidak sebesar 256 atau 128, mungkin itu berarti sesuatu. Jika Anda memasukkan -1 ke dalam tipe data 16-bit yang tidak ditandatangani, Anda mendapatkan 65535, yaitu 1 kurang dari 65536. Jika Anda tahu 2 ^ 16, Anda segera menemukan masalah Anda.

Adapun oktal, lihatlah pertanyaan-pertanyaan ini dan lihat apakah mengenali oktal ketika Anda secara tidak sengaja menanyakannya akan membuat salah satu dari orang-orang ini menjadi programmer yang lebih baik.

Kate Gregory
sumber
1

Ada beberapa matematika dan teknik kompresi data yang sangat efisien yang dapat Anda gunakan ketika Anda memahami sistem ini dan bagaimana mereka bekerja. Anda mungkin tidak akan menggunakannya dalam beberapa pekerjaan pertama Anda. Tetapi memiliki mereka di saku belakang Anda ketika Anda menjadi seorang senior dan Anda diminta untuk membuat sistem warisan yang bekerja terlalu keras yang berjalan di server dinosaurus yang terlalu banyak bekerja terlalu keras itu bagus untuk dimiliki.
Semakin penting ketika Anda berurusan dengan pengontrol dan elektronik yang tidak memiliki api. Terutama jika Anda menulis api itu.

SoylentGray
sumber
1

Dalam pengantar kursus pemrograman yang merupakan bagian dari studi dalam ilmu komputer, sangat masuk akal untuk mengetahui materi itu dengan baik. Anda meninjau kembali topik ketika pemrograman dalam bahasa rakitan, ketika merancang perangkat keras, mengambil kursus tentang bahasa formal, dll. Semua insinyur listrik di universitas saya memerlukan kursus pengantar pemrograman dan mereka kemungkinan akan terus menggunakan informasi itu. Di luar itu, tidak terlalu penting.

Peter Smith
sumber
1

Angka oktal terkadang berguna ketika berhadapan dengan rangkaian karakter. Yang terakhir berbasis byte, dan satu oktal = 8 bit = satu byte. Dalam UTF-8, misalnya, karakter non-ASCII dapat memiliki dua atau lebih byte; angka oktal lebih mudah untuk mewakili mereka daripada angka heksadesimal.

Bit berguna karena ... hei! Anda tahu bahwa komputer Anda terus-menerus berurusan dengan 0 dan 1, kan? Maksud saya serius ... Ini bukan hanya tentang bercanda bahwa ilmuwan komputer adalah satu-satunya yang tahu bahwa 1 +1 = 10. Ini juga berguna untuk operator yang terkait bit atau sebagai varbits. Yang terakhir memungkinkan untuk mengurangi persyaratan penyimpanan dalam database ketika berhadapan dengan serangkaian flag.

Sedangkan untuk heksadesimal, saya kira Anda tidak pernah membuka hex editor untuk meningkatkan statistik dan peralatan karakter RPG Anda. Seandainya Anda melakukannya daripada mengunduh editor karakter, Anda akan tahu betul mengapa lebih mudah untuk memahami nomor hex. ;-)

Denis de Bernardy
sumber
Saya pikir maksud Anda "oktet", bukan "oktal". Satu digit oktal adalah tiga bit. Penggunaan konstanta oktal untuk karakter non-ASCII adalah peninggalan dari hari-hari awal C, yang dikembangkan pada PDP-11, yang menggunakan representasi oktal di sebagian besar dokumentasi (lihat kartu referensi PDP-11 ini ).
TMN
Saya mungkin. Bahasa Inggris bukan bahasa ibu saya. :-)
Denis de Bernardy
1

Saya lulus dari universitas 3 tahun yang lalu, dan saya pikir sangat penting untuk dapat membaca dan menulis angka hex. Saya mengacaukan banyak file XML besar untuk bekerja (arti besar 100MB +). Kadang-kadang Anda akan mendapatkan file XML yang mengandung karakter XML tidak valid, yang tidak dapat ditampilkan di editor teks apa pun jadi saya harus menggunakan editor Hex dan menulis kode untuk menunjukkan karakter yang tidak benar. Tugas itu akan sangat sulit tanpa mengetahui nomor hex.

Alvin
sumber
1

Bertahun-tahun yang lalu saya belajar nilai hex saat bekerja pada sistem 8 bit.

Kejelasan pemahaman bahwa sesuatu terletak di B000 atau E7FF sangat mengagumkan.

Kemarin saya perlu tahu persis karakter apa yang ada di akhir baris teks. Mengetahui perbedaan antara 0x0A dan 0x0A 0x0D bisa sangat penting.

Scott Bruns
sumber
1

Apakah ada yang punya contoh yang baik di mana programmer rata-rata akan benar-benar menggunakan angka oktal?

Oktal hari ini sangat jarang, tetapi saya menggunakan hex sangat sering, dan sering berpikir tentang masalah dalam biner.

Saya memprogram terutama di C dan C ++, dengan beberapa Objective C, dan melakukan banyak pekerjaan dengan raster dan grafik vektor di Linux dan Mac OS X. Di arena itu, sangat penting untuk menulis kode yang berjalan secara efisien dan memanfaatkan penyimpanan. Anda juga harus memahami cara mesin secara internal mewakili apa yang Anda kerjakan. Cara paling mudah untuk melihatnya adalah dengan hex. Misalnya, piksel warna 24-bit standar direpresentasikan dalam tiga byte, dan mengetahui sekilas bahwa 0x000000 berwarna hitam, 0x00FF00 berwarna merah, dan 0x008000 berwarna pink benar-benar bermanfaat!

Saya juga banyak bekerja dengan standar internasional untuk format file. Salah satu yang saya kerjakan baru-baru ini adalah MXF, yang digunakan untuk menyimpan video untuk disiarkan, DVD, dll. Ini adalah format biner, dan sekali lagi, itu paling mudah ditangani dengan menggunakan hex atau kadang-kadang biner. Ketika Anda men-debug mengapa beberapa video berbasis MXF tidak diputar tepat di sistem Anda, itu sangat berguna untuk dapat melirik bidang 32-bit dan menyadari bit untuk mengosongkan layar secara tidak sengaja diatur - dan Anda dapat melakukan itu di hex, tapi itu sangat tidak mungkin di base 10.

Jika Anda akan menghabiskan karir Anda menulis Perl untuk memijat string teks, maka tidak, Anda mungkin tidak perlu terbiasa dengan hex, oktal, atau biner. Tetapi saat Anda mulai berurusan dengan hal-hal yang saya lakukan, hex dan binary setidaknya penting.

Bob Murphy
sumber
0

Anda harus tahu heksadesimal jika Anda ingin menjadi seorang programmer. Itu akan terlalu canggung bagi Anda untuk harus mengakui di tempat kerja pada hari yang jarang Anda perlu tahu bahwa Anda tidak memahaminya.

Tidak berarti Anda harus dapat menambahkan angka heksadesimal di kepala Anda. Itu mulai mengacaukan Anda pada aturan untuk penambahan reguler jika Anda tetap melakukannya. :)

John Robertson
sumber
0

Kesamaan yang dimiliki biner, hex, dan oktal bukanlah bahwa keduanya bukan basis10, tetapi bahwa keduanya adalah kekuatan dua. Karena Komputer secara inheren biner, ini memberi mereka masing-masing beberapa aplikasi di mana mereka adalah cara yang paling tepat atau efisien untuk menampilkan dan menangani data.

Ini dulu sangat penting, kembali ketika semua pemrograman tingkat rendah. Dalam pemrograman tingkat tinggi saat ini, kekuatan sistem Nomor 2 jauh lebih tidak penting. Memiliki pengantar yang menyeluruh untuk mereka dalam setiap kursus pemrograman mungkin merupakan peninggalan masa lalu.

Tetapi sistem angka ini masih memiliki kegunaannya, bahkan ketika Anda bekerja dalam bahasa tingkat tinggi. Warna, misalnya, masih disimpan dalam 24 bit, 8 bit per warna primer. Dan karena heksadesimal adalah cara terbaik untuk merepresentasikan byte dalam cara yang dapat dibaca manusia, itu bahkan merupakan bagian dari CSS, yang seharusnya dapat digunakan oleh orang-orang yang tidak pernah memiliki pengantar pemrograman.

Anda tidak dapat memahami komputer tanpa memahami biner. Pengantar biner adalah bagian penting dari setiap pengantar menyeluruh untuk pemrograman. Anda mungkin tidak perlu melakukan banyak konversi antara sistem angka dalam pekerjaan sehari-hari, tetapi melakukan latihan seperti itu adalah satu-satunya cara untuk benar-benar mengenal sistem angka ini *. Mengetahui lebih dari satu sistem non-basis10 adalah satu-satunya cara untuk memahami dengan benar, bahwa data dapat direpresentasikan dalam banyak cara, semuanya valid.

  • Seperti yang dikatakan John von Neumann: "[..] kita tidak mengerti banyak hal, kita terbiasa dengan mereka."
Waquo
sumber
0

Saya pikir konversi dari satu basis ke basis lainnya tidak terlalu penting untuk pemrograman. Dalam pemrograman tingkat tinggi Anda tidak perlu konversi (dan mungkin Anda pernah melakukannya, fungsi lib dan kalkulator tersedia.) Ketika Anda menyelami pemrograman tingkat bawah, Anda tidak lagi berada dalam kursus pengantar.

Saya pikir dua masalah (terkait) penting untuk dibahas dalam kursus dasar.

  1. Tentang pengodean. Ini bukan tentang konversi matematika tetapi tentang menggunakan angka (semua jenis angka) untuk menyimpan informasi (semua jenis informasi). Anda bisa mengilustrasikan ini dengan kode morse atau melukis dengan angka juga, jika Anda mau. Tetapi karena komputer lebih suka menggunakan biner dan biner biasanya ditampilkan sebagai hex, hal-hal biasanya diilustrasikan dengan contoh hexy. (Dan, sementara mereka melakukannya, mereka mungkin menjelaskan sedikit tentang akhiran garis, yang telah disebutkan dalam topik ini. Saya hanya menyarankan untuk mengenali berbagai bentuk dan bentuk yang bisa diambil, beberapa di antaranya adalah 0x0D, 0x0A , CRLF, '\ n' dan '\ r')

  2. Masalah meluap. Sekali lagi, tidak perlu menggambarkan ini dengan hex. Anda dapat menggunakan contoh y2k (yang tidak ada hubungannya dengan hex apa pun) Di sini saya juga hanya menyarankan untuk mengenali berbagai indikator yang paling mungkin (255, 32767, 65535, 2M14) Mengapa indikator tersebut terkait langsung dengan sifat bytewise penyimpanan internal, tetapi konversi bukan bagian penting.

Saya tidak setuju bahwa Anda perlu mengetahuinya untuk bitflags (karena dalam kursus pengantar pemrograman, konstanta bernama jauh lebih instruksional dan berguna.)

Inca
sumber
0

Jika Anda masuk ke pemrograman tertanam tingkat rendah, Anda akan menggunakan heksadesimal. Ini digunakan untuk hal-hal seperti menentukan pola bit dalam register perangkat keras, dan nilai byte dalam dump memori. Anda juga akan belajar menggunakan setiap operator bit-bijaksana dalam bahasa pemrograman apa pun yang Anda gunakan.

mkClark
sumber