Di mana oktal bermanfaat? [Tutup]

36

Saya hanya membenturkan kepala ke meja selama 20 menit melihat bug yang sangat aneh di PHP, dan kemudian saya menyadari ada oktal. Oktal <% (* & #>.

Singkatnya, saya mengisi beberapa literal dengan nol sehingga kodenya akan selaras, saya tahu, kesalahan besar. Lupa tentang oktal.

Pertanyaannya adalah, adakah yang menggunakan oktal untuk hal lain selain izin file? (Saya pribadi lebih suka chmod ugo+rwxtetapi saya mengerti bahwa jika mereka harus dihasilkan secara programatik, akan berguna untuk menggunakan oktal.) Tetapi apakah mereka berguna dalam situasi lain?

Petruza
sumber
16
Opsi A: Salahkan diri Anda. Opsi B: Salahkan dunia. Opsi C: terkekeh karena Anda telah mempelajari sesuatu.
Pekerjaan
12
@Petrozza - IMO penggunaan gaya-C dari nol terkemuka untuk menunjukkan oktal tidak pernah menjadi pilihan yang baik, tetapi ini adalah sejarah - mungkin sedikit warisan C, meskipun mungkin bahkan lebih tua. Saya pikir Ada memiliki salah satu konvensi yang lebih baik - angka oktal akan dituliskan 8 # 1234567 #, angka hex 16 # abcdef #, dll. Dan nol di depan hanya nol di depan - setiap basis dari 2 hingga 16 (setidaknya) valid , dan semuanya jelas secara visual dan mudah dimengerti.
Steve314
2
@Petruza Pertanyaan Anda dalam bentuk aslinya tidak konstruktif untuk situs ini, dan diperbaiki oleh komunitas sehingga dapat tetap terbuka: lihat FAQ untuk informasi lebih lanjut tentang mengapa orang melakukan ini dan mengapa kami mendorongnya. Jika Anda memiliki pertanyaan atau masalah tambahan, harap sampaikan di situs meta-diskusi kami , bukan di pertanyaan Anda.
11
Opsi D: "salahkan PHP" selalu merupakan pilihan yang tepat, apa pun masalahnya
Cephalopod
2
@ Steve314 Saya sangat setuju. Contoh penting lainnya adalah Python di mana mereka memiliki 0oawalan (yang konsisten dengan 0xdan 0btapi mungkin agak sulit dibedakan dari 00). Dan sejak Python 3, angka nol di depan tambahan merupakan kesalahan sintaks untuk mencegah bug semacam ini.
5gon12eder

Jawaban:

42

Menurut Wikipedia , oktal tidak biasa seperti dulu. Seperti yang telah disebutkan orang lain, di masa lalu, sistem yang digunakan memiliki kata 12/24/36-bit, yang lebih mudah diwakili dalam oktal daripada heksadesimal, tetapi saat ini, arsitektur x86 dan i64 menggunakan bit 16/32/64 kata, yang lebih mudah diwakili dalam heksadesimal dan benar-benar jelek di oktal.

Namun, penggunaan saat ini meliputi:

Perhatikan bahwa bahasa pemrograman modern terkadang tidak mendukung oktal lagi karena kurangnya kasus penggunaan dan potensi bug. C # adalah contoh, seperti Eric Lippert menulis ini di edisi 3 dan 4 TCPL :

C # tidak mendukung literal oktal, karena dua alasan. Pertama, hampir tidak ada orang yang menggunakan literal oktal hari ini. Kedua, jika C # mendukung oktal dalam format standar "leading zero means octal", maka itu akan menjadi sumber kesalahan potensial. Pertimbangkan kode ini:

    FlightNumber = 0541;

Jelas ungkapan ini dimaksudkan sebagai desimal literal, bukan literal oktal.

Terkait, dan hanya untuk referensi dan rasa ingin tahu, Code, The Hidden Bahasa Komputer memiliki penjelasan yang mudah tindak yang sangat baik pada sistem bilangan oktal dan lainnya pada halaman 55-63 .

Abel
sumber
1
Pada catatan itu, perhatikan Javascript saat menangani input pengguna. parseInt(011)==9
Darien
3
Itu sangat menarik tentang Yuki dan Pamean. Baru terpikir oleh saya bahwa penghitungan jari heksadesimal cukup mudah, jika Anda menggunakan bagian dalam setiap jari, menggunakan beberapa variasi, seperti ini
ocodo
@ Slomojo - Anda dapat menghitung sampai 99 pada jari-jari Anda , pada kenyataannya ...
detly
3
+1 untuk jawaban yang sangat komprehensif. Grace Hopper pernah berkata bahwa dia kesulitan menyeimbangkan buku ceknya, karena dia menjadi sangat mahir dalam menambahkan oktal.
Macneil
14
@Detly, jika saya tahu saya harus menghitung angka besar saya akan menggunakan 10 digit saya sebagai bit dan menghitung 1024 hanya dengan jari saya (hanya berhati-hatilah dengan siapa yang menunjukkan # 4, # 128 & # 132).
zzzzBov
17

Oktal banyak digunakan sekitar 50 tahun yang lalu oleh Digital Equipment Corp. (DEC) dan perusahaan lain yang memiliki komputer dengan kata 12-bit (mis. PDP-8) atau kelipatan enam lainnya, seperti 18 dan 36 (mis. UNIVAC 1108 ). Saya menggunakan PDP-8 dan UNIVAC 1108 di sekolah pascasarjana. Karakter di kedua mesin biasanya menggunakan enam bit, bukan 8.

Format instruksi PDP-8

Format instruksi PDP-8 - perhatikan bit diberi nomor 0 -> 11. Bit 0 adalah MSB (bit paling signifikan).

Ketika DEC mengeluarkan 16-bit PDP-11, mereka terus menggunakan oktal dalam dokumentasi mereka alih-alih heksadesimal seperti yang digunakan oleh produsen komputer mini lainnya yang keluar dengan mesin 16-bit pada saat itu. Ini mungkin karena beberapa bidang 3-bit dalam format instruksi PDP-11 seperti Register, Mode dan Src / Dest yang meminjamkan diri mereka untuk diterjemahkan sebagai digit oktal. (Terima kasih kepada John Strohm karena menunjukkan ini.)

Menariknya, ketika Motorola keluar dengan mikroprosesor 68000 mereka, yang sangat dipengaruhi oleh PDP-11 dan memiliki bidang Mode dan Registrasi 3-bit yang sama dalam instruksi, mereka memilih untuk hanya menggunakan heksadesimal dalam dokumentasi mereka.

Karena PDP-11 menggunakan notasi oktal, kode izin asli untuk Unix, yang pertama kali muncul di PDP-11, juga menggunakan oktal. Warisan ini tetap ada di Linux, di mana perintah chmod masih menggunakan oktal untuk menentukan masing-masing bidang 'rwx' tiga bit.

Beberapa hal sepele lainnya - CompuServe, yang merupakan layanan online dial-up yang banyak digunakan pada 1980-an dan awal 1990-an (sebelum dibayangi oleh AOL), dijalankan dengan minicomputer DEC, setidaknya pada awalnya. Semua ID pengguna adalah angka, dan pada beberapa titik saya membuat pengamatan bahwa mereka tidak pernah memasukkan 8 atau 9 di dalamnya, sehingga mereka berada di oktal. ID CIS lama saya adalah 70205.

tcrosley
sumber
1
Komentar Anda tentang dokumentasi PDP-11 salah. PDP-11 memiliki 8 register. R0-R5 adalah register tujuan umum. R6 adalah penunjuk tumpukan, dan R7 adalah PC. Instruksi MOV mengambil dua nomor register 3-bit dan dua mode pengalamatan 3-bit. Oktal menangkap bidang register dan mode dengan sempurna. (Saya sangat meragukan bahwa ini adalah kecelakaan.) Menggunakan hex akan membingungkan segalanya. PUSH dan POP hanya menangani mode yang menggunakan R6. Operan langsung adalah mode pengalamatan yang menggunakan R7.
John R. Strohm
@ JohnR.Strohm Terima kasih atas komentarnya tentang register 3-bit. Saya setuju dengan analisis Anda dan telah memperbarui jawaban saya.
tcrosley
Jadi DEC bekerja di OCT. Seharusnya baru saja menggunakan kelipatan 3,32 bit untuk menghindari kebingungan.
user234461
Sangat lucu bagaimana saya tidak pernah menganggap izin Unix sebagai angka oktal, saya selalu menganggapnya sebagai tiga digit individu yang ditulis bersama, masing-masing mewakili tiga bit rwx, sehingga bisa berupa oktal, desimal, atau bahkan hex.
axl
11

Heathkit menggunakannya untuk panel depan H-8 mereka, dan untuk daftar bahasa rakitan perangkat lunak panel depan mereka (disebut PAM-8). Kencan sendiri, saya tahu.

masukkan deskripsi gambar di sini

Saat ini oktal sangat jarang; semua orang tampaknya menggunakan hex. Namun angka masih terlihat seperti angka dalam oktal, dan Anda tidak perlu deretan tombol tambahan untuk digit A hingga F.

Robert Harvey
sumber
2
+1 untuk H-8. Meskipun oktal di bagian luar, CPU adalah 8080A, yang semuanya byte. Go figger.
Blrfl
Saya kira mereka menggunakan oktal untuk kesamaan dengan H-11 (yang memiliki CPU PDP-11).
Jerry Coffin
2
8080 memiliki byte 8-bit, tetapi set instruksi lebih masuk akal jika dilihat dalam oktal daripada di hex.
RBerteig
6

Salah satu alasan mengapa oktal melihat penggunaan adalah karena basis terbesar adalah kekuatan 2 yang mana Anda tidak memerlukan karakter khusus - yaitu, semua digit dapat berupa angka. Basis 16 (yang berikutnya dari basis 8) membutuhkan digit non-numerik (biasanya A, B, C, D, E, F).

tylerl
sumber
Saya tahu ini sudah tua, tetapi mengapa hanya menggunakan angka numerik lebih baik daripada menggunakan huruf?
Petruza
5

Saya menggunakan oktal setiap hari. Setiap kali saya perlu chmod file saya menggunakan oktal (saya pra-tanggal notasi u + r ...). Setiap kali saya ingin menanamkan karakter kontrol di dalam string saya menggunakan oktal ... (Ya, saya bisa menggunakan hex, tetapi oktal adalah apa yang saya gunakan).

Majenko
sumber
2
+1 untuk "tetapi oktal adalah yang saya gunakan" :)
JoelFan
5

Siapa pun yang perlu mengekspresikan kombinasi bit yang dikelompokkan dalam bertiga.

Mengapa ada yang menggunakan hex?


Hal-hal di luar kepala saya yang dinyatakan sebagai angka oktal:

  • Kode-kode diperas oleh transponder Mode 3A di pesawat terbang
  • Nilai-nilai tertentu ditemukan pada bus avionik ARINC 429
  • Alamat SCSI
  • Kode kunci di ncursesperpustakaan
Blrfl
sumber
11
Bedanya, hex adalah "alami" sebagai setengah byte. Dua digit hex = 1 byte. Tetapi Anda tidak dapat membagi byte menjadi digit oktal.
Mason Wheeler
2
Baris pertama menyatakan yang jelas. Yang kedua membuat analogi yang buruk.
back2dos
3
Dan hex benar-benar tidak wajar untuk apa pun yang perlu diekspresikan dalam kelompok tiga bit seperti mode file Unix yang disebutkan di atas. Tidak ada hukum yang mengatakan bahwa angka sistem penomoran tertentu harus sejajar dengan byte. Jika ada, mengekspresikan sesuatu ke komputer sebagai basis 10 akan menjadi praktik yang lebih buruk daripada basis 8, yang setidaknya menyelaraskan diri dengan kelompok bit.
Blrfl
6
string hex khas jelas string hex. oktal tidak.
Paul Nathan
1
@ Bllfl: Jadi, berapa banyak dari yang disebutkan ini "[hal-hal yang] perlu diekspresikan dalam kelompok tiga bit" yang ada selain dari contoh kanonik? Itulah pertanyaan sebenarnya, yang sejauh ini belum Anda jawab. Sebaliknya Anda membuat analogi yang buruk. Sebenarnya ada penggunaan untuk representasi desimal, karena kami hanya belajar untuk menanganinya. Mana yang akan Anda hitung lebih cepat? 7 * 6atau 07 * 06? Kami menggunakan desimal untuk merepresentasikan angka karena kami dapat menanganinya dengan baik dan hex untuk mewakili angka yang sangat dekat dengan bagaimana mesin menyimpannya. Dan kita sering melakukan ini. Situs ini penuh dengan buktinya.
back2dos
5

Kembali ketika saya bekerja pada mainframe CDC (dengan kata 60-bit, kata 12-bit untuk PPU), semua dump inti dan semacamnya dilakukan dalam oktal (20 digit oktal per kata, 4 per kata PPU).

Jerry Coffin
sumber
3

Seperti heksadesimal, notasi oktal kadang-kadang digunakan untuk menentukan kode karakter. Ini bisa berguna karena alasan yang sama dengan heksadesimal: lebih kompak daripada biner, tetapi sangat mudah diterjemahkan ke biner di kepala Anda.

Caleb
sumber
2

Seperti Hex, angka oktal mudah dikonversi dari biner. Cukup kelompokkan angka biner dalam kelompok tiga, mulai dari kanan.

10010101110  // binary

// conversion
(010)(010)(101)(110)
// so, in octal we have...
(2)(2)(5)(6)
2256

10010101110 (base 2) == 2256 (base 8)
Ed S.
sumber
7
Ini jelas. Pertanyaannya adalah kapan ini benar-benar digunakan .
back2dos
2
@ back2dos: maka silakan mengirim jawaban daripada meninggalkan komentar yang sama beberapa kali.
Ed S.
4
@ Ed S. Anda bahkan tidak mencoba menjawab pertanyaan. Anda mengatakan sesuatu yang jelas bahwa poster asli hampir pasti sudah tahu jawabannya. Karena moderator gemar mengatakan, ini bukan tujuan kami. Lihat meta.programmers.stackexchange.com/questions/1968/… untuk lebih lanjut.
btilly
@ back2dos, btilly - Jawaban di situs Stackexhange bukan hanya untuk OP, tetapi juga menjadi sumber yang persisten untuk setiap pembaca yang lewat. Semua fakta yang jelas , belum tentu jelas bagi semua orang, jika jawaban ini membantu penny-drop untuk seseorang yang memiliki nilai.
ocodo
2
@ Slomojo meskipun dengan argumen itu, setiap pertanyaan memenuhi syarat untuk menjadi wiki untuk setiap aspek terkait dari suatu topik. Intinya adalah ini tidak menjawab pertanyaan . Jawaban ini tentu saja bisa berlaku di tempat lain, untuk "Bagaimana cara cepat mengubah mental menjadi oktal?"
Nicole
2

Nggak. Tidak pernah menggunakannya. Bahkan untuk mengatur izin file, karena saya jarang melakukannya, saya kesulitan membaca.

Jadi ya, ada manfaat nyata konversi dari dan ke biner.
Namun, seperti yang sudah ditunjukkan oleh @Mason, hex jauh lebih "alami", karena 2 digit hex menghasilkan satu byte. Sangat praktis untuk mewakili warna 24/32 bit RGB / ARGB, alamat IP, masker byte, dll. Oktal di sisi lain tidak terlalu praktis, karena Anda jarang memiliki skenario di mana Anda bekerja dalam hal grup 3-bit.

Izin file sebenarnya satu-satunya hal yang bisa saya pikirkan. Dan jika tidak ada area penggunaan sampai sekarang, saya ragu akan ada satu. Sejak 20 tahun terakhir ruang menjadi sangat murah, menjadi sangat tidak biasa untuk mengemas informasi dengan sangat ketat, dengan biaya penyelarasan, kemudahan penggunaan, dan ekstensibilitas.

back2dos
sumber
2

Sedikit kesamping, tetapi penggunaan umum ada di London Underground. Setiap kereta memiliki identitas fisik, dan identitas terpisah dalam jadwal yang ditampilkan saat dalam pelayanan - lihat di sini: https://upload.wikimedia.org/wikipedia/commons/4/49/LUL-S-Stock-at -Watford.jpg (perhatikan 402 di bagian atas layar tujuan). Meskipun elektronik untuk monitor berbasis standar desimal, Anda tidak pernah melihat angka 8 atau 9 karena terikat dengan perangkat keras berbasis oktal lama dalam sistem pensinyalan.

Julia Hayward
sumber