it-swarm.asia

Sekizli nerede yararlıdır?

Ben sadece PHP tamamen tuhaf bir hata bakarak yaklaşık 20 dakika boyunca kafamı masaya çarptım ve sonra sekizlik olduğunu fark ettim. <% (* & #> Sekizli).

Kısacası, kodun hizalanması için bazı değişmez değerleri sıfırlarla doldurdum, biliyorum, büyük hata. Sekizgenleri unuttum.

Soru şu ki, kimse dosya izinleri dışında herhangi bir şey için sekizli kullanıyor mu? (Şahsen chmod ugo+rwx ama ben programatik olarak oluşturulması gerekiyorsa, sekizlik kullanmak yararlı olduğunu anlıyorum.) Ama başka herhangi bir durumda yararlı mı?

36
Petruza

Wikipedia 'a göre, sekizlik eskisi kadar yaygın değildir. Diğerlerinin daha önce de belirttiği gibi, geçmişte, sistemlerde sekizli olarak onaltılıdan daha kolay temsil edilen 12/24/36 bitlik bir Word vardı, ancak şu anda x86 ve i64 mimarileri 16/32/64 bit kullanıyor Sekizlik ve çirkin sekizlik içinde daha kolay temsil edilen Word.

Bununla birlikte, mevcut kullanımlar şunları içerir:

Modern programlama dillerinin bazen kullanım senaryolarının eksikliği ve hata potansiyeli nedeniyle artık sekizli desteği desteklemediğini unutmayın. Eric Lippert bunu TCPL 3. ve 4. baskıda yazdığında C # bir örnektir:

C # iki nedenden ötürü sekizli değişmez değerleri desteklemez. Birincisi, bugünlerde neredeyse hiç kimse sekizli değişmez kullanıyor. İkinci olarak, C # standart "baştaki sıfır, sekizlik anlamına gelir" biçiminde sekizli destekliyorsa, potansiyel bir hata kaynağı olacaktır. Bu kodu düşünün:

    FlightNumber = 0541;

Açıkçası bu ifade, sekizli bir değişmez değil ondalık bir değişmez olarak tasarlanmıştır.

İlgili ve sadece referans ve merak için, Kod, Bilgisayar Donanımının Gizli Dili sekizli ve diğer sayı sistemleri üzerinde mükemmel bir takip edilmesi kolay açıklamaya sahiptir sayfa 55 - 6 =.

42
Abel

Octal yaklaşık 50 yıl önce Digital Equipment Corp. (DEC) ve 12 bitlik Word'e (örneğin PDP-8) veya 18 ve 36 gibi altı katına (örneğin UNIVAC 1108) sahip bilgisayarlara sahip diğer şirketler tarafından yaygın olarak kullanıldı. ). Grad okulunda hem PDP-8'i hem de UNIVAC 1108'i kullandım. Her iki makinedeki karakterler genellikle 8 değil altı bit kullanıyordu.

PDP-8 instruction format

PDP-8 komut formatı - bitlerin 0 -> 11 olarak numaralandığını unutmayın. Bit 0, MSB (en önemli bit) idi.

DEC 16-bit PDP-11 ile çıktığında, o zaman 16-bit makinelerle çıkan diğer mini bilgisayar üreticileri tarafından kullanılan onaltılı yerine sekizli yerine sekizli kullanmaya devam ettiler. Bunun nedeni muhtemelen PDP-11 komut formatlarındaki Register, Mode ve Src/Dest gibi sekiz bitlik alanların kendilerinin sekizlik bir rakam olarak çözülmesini sağlamasıydı. (John Strohm'a bunu işaret ettiği için teşekkürler.)

İlginçtir, Motorola, PDP-11'den büyük ölçüde etkilenen ve talimatlarda aynı 3 bit Mod ve Kayıt alanlarına sahip olan 68000 mikroişlemci ile çıktığında, belgelerinde yalnızca onaltılık kullanmayı seçtiler.

PDP-11 sekizli gösterimi kullandığından, ilk olarak PDP-11'de görünen Unix için orijinal izin kodları da sekizli kullanmıştır. Bu eski Linux, chmod komutunun üç bitlik 'rwx' alanlarının her birini belirtmek için hala sekizli kullandığı Linux'ta devam eder.

Biraz daha önemsiz - 1980'lerde ve 1990'ların başında (AOL tarafından gölgede bırakılmadan önce) yaygın olarak kullanılan çevirmeli çevrimiçi hizmet olan CompuServe, en azından orijinal olarak DEC mini bilgisayarlarında çalıştı. Tüm kullanıcı kimlikleri sayısaldı ve bir noktada onlara hiçbir zaman 8 veya 9 eklemedikleri gözlemini yaptım, bu yüzden sekizli idi. Eski CIS kimliğim 70205'ti.

17
tcrosley

Heathkit bunları H-8'lerinin ön paneli ve ön panel yazılımlarının (PAM-8 olarak adlandırılan) Montaj dili listeleri için kullandı. Kendimle çıkıyorum, biliyorum.

enter image description here

Günümüzde sekizlik çok nadirdir; herkes hex kullanıyor. Ancak sayılar hala sekizlik sayılar gibi görünür ve A'dan F'ye kadar olan rakamlar için ek bir tuş sırasına ihtiyacınız yoktur.

11
Robert Harvey

Sekizli'nin kullanım görmesinin nedenlerinden biri, özel karakterlere ihtiyacınız olmayan 2'lik bir güç olan en büyük taban olmasıdır - yani, tüm rakamlar sayısal olabilir. Taban 16 (taban 8'den sonraki) sayısal olmayan rakamlar gerektirir (genellikle A, B, C, D, E, F).

6
tylerl

Üçlü gruplar halinde gruplanmış kombinasyonlarını ifade etmek isteyen herkes.

Neden kimse hex kullanıyor?


Sekizli sayılar olarak ifade edilen başımın üst kısmındaki şeyler:

  • Uçaklarda Mode 3A transponderler tarafından ciyaklayan kodlar
  • ARINC 429 aviyonik veriyolunda bulunan belirli değerler
  • SCSI adresleri
  • ncurses kütüphanesindeki anahtar kodları
5
Blrfl

Her gün sekizli kullanıyorum. Ben bir dosya chmod her gerektiğinde sekizli kullanıyorum (u + r gösterimi öncesi ...). Bir kontrol karakterini bir dizgiye gömmek istediğimde sekizli kullanıyorum ... (Evet, hex kullanabilirim, ama sekizli kullandığım şey).

5
Majenko

CDC ana çerçeveleri üzerinde çalıştığımda (60 bit Word, PPU için 12 bit Word ile), tüm çekirdek dökümler ve benzeri sekizlik (Word başına 20 sekizli basamak, PPU Word başına 4) yapıldı.

5
Jerry Coffin

Onaltılık gibi, bazen sekizlik gösterimi karakter kodlarını belirtmek için kullanılır. Onaltılık aynı nedenden dolayı kullanışlı olabilir: İkiliden daha kompakttır, ancak kafanızdaki ikiliye tercüme edilmesi çok kolaydır.

3
Caleb

Biraz bir kenara, ama kamu kullanımı Londra Metrosu'nda. Her trenin hizmet sırasında görüntülenen programlarda hem fiziksel bir kimliği hem de ayrı bir kimliği vardır - buraya bakın: https://upload.wikimedia.org/wikipedia/commons/4/49/LUL-S -Stock-at-Watford.jpg (hedef ekranın üst kısmındaki 402'yi not edin). Ekranlar için elektronik cihazlar bataklık standart ondalık tabanlı olsa da, 8 veya 9 rakamlarını asla görmezsiniz, çünkü bunlar sinyalizasyon sistemindeki eski sekizli tabanlı donanıma bağlıdır.

2
Julia Hayward

Hex gibi, sekizli sayıları ikili dosyadan dönüştürmek kolaydır. İkili rakamları sağdan başlayarak üç kişilik gruplar halinde gruplandırın.

10010101110  // binary

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

10010101110 (base 2) == 2256 (base 8)
2
Ed S.

Hayır! Onları hiç kullanmadım. Dosya izinlerini ayarlamak için bile değil, çünkü bunu çok nadir yapıyorum, okumayı zor buluyorum.

Evet, ikiliden ikiliye dönüşümün bariz bir yararı vardır.
Bununla birlikte, @Mason tarafından belirtildiği gibi, hex çok daha "doğal" dır, çünkü 2 hex basamak bir bayt oluşturur. 24/32 bit RGB/ARGB renkleri, IP adresleri, bayt maskeleri vb.

Dosya izinleri aslında düşünebildiğim tek şey. Ve şu andan itibaren bir kullanım alanı yoksa, bir tane olacağından şüpheliyim. Son 20 yılda alan çok ucuz hale geldiğinden, hizalama, kullanım kolaylığı ve genişletilebilirlik pahasına bilgileri çok sıkı bir şekilde paketlemek çok nadir hale geldi.

2
back2dos