Kelime başına iki bitlik güç “uygun” mu? Eğer öyleyse, neden böyle?


11

İkili bir sözcükteki iki bitlik gücün (bayt başına 8 bit gibi) "iyi bir şey" veya "uygun" olduğunu iddia eden birkaç kaynak buluyorum. Nedenini gösteren hiçbir kaynak bulamıyorum.

Kimden byte neden sekiz bittir? onaylanmış cevabı okuyoruz:

İkili bilgisayarlar, tasarımcıları iki büyüklükte güçler yapmaya motive eder.

Tamam ama neden? Aynı soruda ama sorunun yorum alanında buldum:

Son cümle jest midir? 12 bitlik bir bayt rahatsız edici olacaktır çünkü 2'nin gücü değil. - robjb

Yine, mantıksızlık ...

adres hesaplamaları 2 gücü ile çok daha basit bir halt ve küçük kutularda ham transistörlerden mantık oluşturduğunuzda önemlidir - Mike

Baytlar adreslenebilir en küçük birim olduğundan, bu pek mantıklı değildir. Yorum üzerinde upvotes bir sürü olsa. Belki bir şeyi özledim.

Gönderen Vikipedi :

Sekiz bitlik fiili standart, bir bayt için 0 ila 255 değerlerine izin veren iki kişilik uygun bir güçtür

Ve bu uygun olurdu çünkü ...?

Açıklama için bu sayısı ile ilgili olan bit bayt başına (örneğin, 8 ya da 6, vb), olup sayısı değerleri bayt başına (örneğin, 2 8 ya da 2 6 , vb.) Karışıklık nedeniyle, bunun Word boyutları ile ilgili olmadığını da belirtiyorum.

Tarihsel nedenlerle fazla ilgilenmiyorum. Bunlar başka yerlerde iyi açıklanmıştır (bkz. Bağlantılar).


SO ile ilgili soru: /programming/1606827/why-is-number-of-bits-always-a-power-of-two


2
@gnat Burada bayt başına bit sayısı (yani 8 bit baytta 8) hakkında konuştuğumuzdan eminim, bir baytın temsil edebileceği değerlerin sayısı değil (yani 8 bit baytta 2 ^ 8). Örneğin, 6 bitlik bir baytınız varsa, 6 , ikinin gücü değildir , ancak evet, 6 bitlik bir bayt, iki sayı değerinin gücünü temsil edebilir.
8bittree

2
@ 8bittree Sanırım anladım, açıkladığınız için teşekkürler! (yinelenen oyu geri çekilmiş - Ben senin son yorum olurdu gibi bir açıklama eğer okuyucular için kolay olacağını düşünüyorum gerçi düzenlemek soru ed, bu şey oldukça ince görünüyor)
tatarcık

2
SO hakkında benzer soru: stackoverflow.com/q/1606827/3723423 - cevap kolaylık hakkında bazı makul argümanlar getiriyor
Christophe

2
@Snowman: OP'nin görevi bir "soru dileniyor" yanılgısı içeriyor: "İki güç neden neden uygun bayt boyutları olarak kabul ediliyor?" Onlar değil. İki güçle ilgisi yoktur; Wikipedia makalesinde cümleyi yanlış okudu.
Robert Harvey

3
@RobertHarvey "Baytların neden sekiz bit olduklarının tarihi nedir?" (sorum da bağlantılı) şu cümle var: "İkili bilgisayarlar tasarımcıları iki büyüklükte güçler yapmaya motive ediyor." Bunu da yanlış mı okudum? Her iki kaynak da sizce ne ifade ediyor? Sadece "yanlış anladın" demek, bunu benim için yapmıyor.
Andreas

Yanıtlar:


10

8 bit baytın başarılı olduğunu düşünmüyorum çünkü iki güç olan bir genişliğe sahipler. Bitleri ayrı ayrı ele almak istemiyorsanız - ve bu ne şimdi ne de geçmişte ortak bir özelliktir - iki güce sahip olmak pratik bir öneme sahip değildir (sadece - artık zaman ayırırken geçmişte olduğundan çok daha fazla) bazı ayrık bileşenler önemliydi - donanım ve yazılım mühendisleri için bir refleks ve tanıdık bir yerde kalmak başka amaçlar için önemlidir) ve bilgi işlem okuma geçmişimde belirtildiğini hatırlamıyorum (1). Birinin daha küçük vakalara ihtiyacı vardı, bu da o zamanlar baskın olan 6 bitlik karakter setlerinden daha fazlası anlamına geliyordu. ASCII 7-bit idi, ancak ASCII daha sonra tamamen karşılıklı değişim için olduğu gibi (ve böylece işleme için iç koda çevrilecek) ve böylece

Alt Komite, bilgisayar üreticisinin dahili olarak 7 bit kod kullanan bilgisayarlar tasarlama olasılığının düşük olduğunu kabul eder. 4 bit, 6 bit ve 8 bit kod kullanma olasılıkları daha yüksektir. Şu anda bilgisayarlar arasında ve bilgisayarlar ile ilişkili giriş / çıkış ekipmanı arasında 128'den fazla ayrı ve farklı karakter değişimi için yaygın bir ihtiyaç yoktur. [Doğal çerçeve boyutu 8 bit olan ancak pariteye ihtiyaç duyulan, böylece bir çerçevenin yükünün 7 bit olduğu kağıt bant da ASCII için 7 bit karakter lehine belirtilir, ikisinin gücü 8 bitin avantajları arasında gösterilmez ] (2)

ve donanım için 8-bit bayt kazandı, çünkü verilerin% 75'i sayısal ve BCD'de temsil edildiğinde bir kerede 2 ondalık hane toplamaya izin verdi (3).

(1) örneğin Blaauw ve Brooks, Bilgisayar Mimarisi ; MacKenzie, Kodlu Karakter Kümeleri, Tarih ve Gelişim bu konuda hem tartışıyor.

(3) MacKenzie tarafından belirtilen X3.2 - ASCII'den sorumlu Alt Komite - belgesi.

(3) MacKenzie, yine.


1
Teşekkür ederim. Cevabınız yerinde ve referanslar getirdiniz. Benim oyum sende. Bununla birlikte, söylediğiniz şeyin doğru olduğunu kanıtlamanın imkansız olduğunu anlıyorum. Bir şeyin var olmadığını kanıtlayamıyor. Sanırım gerçekten "kolaylık" iddiasında olanları sorgulamalı ve kaynaklarını kontrol etmeliyim. Belki de sadece geniş bir söylenti.
Andreas

Diğer uygunluk faktörü, bir baytın iki onaltılık değer olarak kolayca gösterilebilmesidir. Bir bayta iki ikili kodlu ondalık sayı (BCD) koymak daha yaygın olarak paketlenmiş ondalık olarak adlandırılır. Veriler onaltılık olarak görüntülendiğinde ondalık sayılar ondalık sayı olarak okunabildiğinden bu gerçekten uygun görülmüştür.
JimmyJames

12 bit bayt, üç onaltılık değer olarak kolayca temsil edilebilir. Ve 12 bit baytta üç BCD numarası saklayabilirsiniz. Elbette bu iki onaltılık değerden ve iki BCD sayısından çok daha iyi. Aslında, 10 bit bayt üç ondalık basamak içerebilir. Ve sanırım IEEE ondalık kayan nokta standardı bu şekilde çalışıyor.
gnasher729

1
@JimmyJames, nedenselliğin onaltılık düzeniyle tersine çevrildiğini düşünüyorum. Onaltılık popüler oldu, çünkü 8 bit baytı temsil etmek için kompakt bir yoldu, daha önce sekizli çok daha popülerdi (ve 8 bit baytları olan ancak 3 bit alanların önemli olduğu PDP-11 gibi bir makinede daha popülerdi komut kümesi kodlamasında).
AProgrammer

@ gnasher729, 8-bit bayt 60'ların bir çocuğu. 6-bit karakterden 12-bit karaktere geçmek 60'larda düşünülemezdi. Bugün bile çok daha az kısıtlı olduğumuzda bile UTF-8 popülerdir çünkü UTF-16 çok boşa harcanmaktadır. 10 bitlik bir bayt düşünülemezdi ve zamanın teknolojisiyle uygulama üzerindeki etkisi hakkında konuşmadan kayıtlarda ve bellekte değerleri incelediğinizde, 3 ondalık basamaklı kodlama başına 10 bit de tamamen pratik değildir.
AProgrammer

2

Tarihsel kaza dışında, 8/16/32/64 bit kullanmamızın özel bir nedeni yoktur. 12/24/48/96 bitin gerçekten daha yararlı olacağını düşünüyorum.

Metin işlemek için varsayımsal bir UTF-24 kullanan Unicode, UTF32'den daha ucuz olacaktır; varsayımsal UTF-12, tüm tek ve çift bayt UTF-8 karakterlerini 12 bitte ve tüm üçlü ve dört bayt UTF-8 karakterlerini 24 bitte saklar (aralık 2 ^ 20 karaktere biraz azalır, ancak bu hala dört kat daha fazladır) cömertçe kullanılandan daha fazla); sadece iki varyant olduğundan kod daha basit olurdu.

Kayan nokta için 48 bit genellikle yeterlidir. 96 bit, 80 bit uzatmadan önemli ölçüde iyidir. 24 bit grafikler için kullanışlıdır; bazı grafik kartlarının desteklediği 16 bit'ten çok daha kullanışlı. 48 bit işaretçiler 256 terabayt kullanabilir.

Tek dezavantaj, bit dizilerini hesaplamak için 12'ye bölünmenin gerekli olduğu bit dizileridir. Bunun önemli olduğu düşünülüyorsa, eminim ki 12'ye bölme donanımda oldukça verimli bir şekilde uygulanabilir.


Biraz konu dışı olmasına rağmen UTF hakkında ilginç bir nokta. Kayan nokta bayt (veya bit) boyutu, sadece biri veya diğeri ile yaşamak zorunda olduğunuz bellek ve hassasiyet arasında sonsuz bir savaştır. Bit dizileri hakkında da iyi bir nokta.
Andreas

1
İlginç düşünceler, ama bunun soruyu cevapladığından emin değilim.

1
Soru şuydu: "Sekiz bit neden uygun kabul ediliyor". Şüphesiz "öyle değil" demek soruyu cevaplar.
gnasher729

1
@ gnasher729 Soru şuydu: Cevabınız da geçerli olsa da, "Bayt başına iki bitlik güç neden uygun görülüyor?"
8bittree

2
Yorumlar uzun tartışmalar için değildir; bu görüşme sohbete taşındı .
yannis

2

Bu, 8 bitlik çoklu, örneğin 32 bit ve 64 bit mimarileri kullanan yaygın donanım mimarileri nedeniyle uygundur. Bu, 8 bit veri depolama ve aktarımı kullanılırken daha fazla verimlilik anlamına gelir.

"Bununla birlikte, tasarımdaki ekonomi ile ilgili düşünceler, bir boyutu veya katlar veya kesirler (alt kümeler) ile ilgili çok az boyutu birincil boyuta zorlamaktadır. Bu tercih edilen boyut, mimarinin kelime boyutu haline gelir."

Word (bilgisayar mimarisi)

Ayrıca bakınız: Baytların neden sekiz bit olduklarının tarihi nedir?


5
Bunu bir cevap olarak kabul etmeyeceğim. Sorum şu ki, ikisinin gücü neden kullanışlı, defacto standardının neden 8 bit olduğu değil. Ve 8-bit'in arkasındaki tarih, gerçek nedenlerle 5, 6 ve 7 bit kullanıldığından bahsederken, 7'den 8'e gitmek bir "meh, neden olmasın" ile motive edilir. İkisinin gücünün mevcut sistemlere uyumluluğundan daha fazlasına sahip olduğu farklı kaynakları okuma hissini aldım. (Gerçekte 8-bit 7-bit karakter kümeleri parite verdi.) Word, iki boyutun gücünden yararlandığım farklı bir şeydir, yani, hesaplamalarda mult yerine shift kullanılabilir.
Andreas

3
@RobertHarvey Bu soru, anahtar başına durum sayısı ile ilgili değildir (örneğin, ikili veya üçlü veya daha fazla), birlikte gruplanacak kaç anahtarla ilgilidir. Sorudaki düzenlememe bakın.
8bittree

2
Düzenlemenize gelince, bayt başına bit sayısı ile bayt başına değer sayısı arasında anlamlı bir fark yoktur . Aynı şeyi ifade etmenin iki yolu. Bir baytın tutabileceği değer sayısı, içerdiği bit sayısından doğrudan gelir: bir baytın 8 biti vardır ve böylece değerleri tutabilir 2⁸-1.
Robert Harvey

2
Mantıksal olarak, uygun bir sayısal aralık tutabilen bayt için bir boyut seçmeniz gerekir. ASCII, 7 bittir, çünkü bu, Roma alfabesinin her iki durumunu, sayısal karakterleri, noktalama işaretlerini, kontrol karakterlerini ve birkaç özel karakteri kodlamak için yeterli 128 farklı değer sağlar. Bir bayt, hata denetimi için 7 ASCII biti ve bir eşlik bitini, bir teletipe uygun toplam 8 bit için tutabilir. O zamandan beri bir bayt için bu boyutu kullanıyoruz.
Robert Harvey

2
@JeremyKato Bahsettiğim cihazlar daha eskidir (çoğunlukla 60'lar-80'ler dönemi), bu yüzden muhtemelen onlara aşina değilsiniz. ASCII, aslında 7 bit kodlamadır (parite standardın bir parçası değildir). Ama yorumunuzun ana kısmı için, hayır, hiçbir şeyi kaçırmıyorum. 8 bitin özellikle uygun olmasının nedenleri olduğunu anlıyorum, siz ve Robert Harvey'in eksik olduğu şey, sorunun özellikle 8 bit değil , genel olarak 2 bitlik güçleri sormasıdır.
8bittree

1

Kelime için Wikipedia makalesine göre , bu, bellek adreslemeyle ilgili hesaplamaları önemli ölçüde kolaylaştırır:

Veri değerlerini farklı hassasiyet derecelerinde depolamak için farklı miktarlarda bellek kullanılır. Sık kullanılan boyutlar genellikle adres çözümleme biriminin (bayt veya sözcük) iki katının gücüdür. Bir dizideki öğenin dizinini öğenin adresine dönüştürmek için çarpma yerine yalnızca bir kaydırma işlemi gerekir. Bazı durumlarda bu ilişki, bölme işlemlerinin kullanılmasını da önleyebilir. Sonuç olarak, çoğu modern bilgisayar tasarımı, bir bayt boyutunun iki katı bir güç olan kelime boyutlarına (ve diğer işlenen boyutlarına) sahiptir.


2
Evet, bir bayt boyutunun iki katı güç. Bir baytın dokuz, on iki veya on beş değil, sekiz bit olması için doğal bir neden yoktur.
gnasher729

@ gnasher729, 8'e (ya da 16 ya da 32 ya da 64) bölmek, 9 ya da 12 ya da 15'e bölmekten çok daha kolay
robert bristow-johnson

@ gnasher729, kelime 2 bitlik güç ve 2 baytlık
güçse, baytın

@vartec Makale ve alıntıda "Yaygın olarak kullanılan boyutlar genellikle adres çözümleme biriminin (bayt veya sözcük) iki katının gücüdür" ve "çoğu modern bilgisayar tasarımında güç olan sözcük boyutları (ve diğer işlenen boyutları) vardır bayt boyutunun iki katı büyüklüğünde. " Ben okudum "kelime boyutu" bit değil bayt olarak ölçülür. Makaledeki bitlerin kelime boyutu hakkında 2'nin gücü veya olması gerektiğine dair bir kural yoktur.
Andreas

@vartec: EĞER. Açıkçası kimse 32 bit kelime ve 12 bit baytlık bir makine inşa etmeyecekti. Ancak 48 veya 96 bit kelime ve 12 bit baytlık bir makineye karşı hiçbir şey konuşmaz. Ve bir kelimenin on bayt olduğu makineler var.
gnasher729

0

Adres alanı ile sıkı bir şekilde ilişkilidir. Adres veriyolunuza bir bit daha ekleyerek bellek konumlarının iki katına kadar adres alabilirsiniz. Bu ekstra çizgiyi eklediğinizde, onu sonuna kadar kullanabilirsiniz.

Bu 1, 2, 4, 8, 16, 32 et cetera'nın doğal ilerlemesine yol açar.

Üretim teknik düzeyinde aynı litografik paterni tekrarlamak da kolaydır. Yani, ikiye katlamak. Bir mandalla başlar ve ardından deseni iki katına çıkarırsanız, 6, 10 veya 12'yi değil 8'i geçersiniz.


1
Bu bir bayttaki bit sayısı ile nasıl ilişkilidir? 32 bit mantıksal bir AND'in uygulanmasının 36 veya 28 bitten daha kolay olduğunu ciddi bir şekilde mi iddia ediyorsunuz?
gnasher729

1
Ben böyle bir iddiada bulunmadım. Benim önerim, transistörler daha ucuz hale geldikçe ve daha küçük devreler için IC'lere izin verildiği için genişletilmiş olarak genişleyen daha eski tasarımlardan kaynaklanıyor.
Martin Maat

1
Üretim teknik seviyesi hakkında ilginç bir teori. Bir şey üzerinde olabilirsiniz. Paragrafı uzatabilir veya temel bilgileri açıklayan bir bağlantı sağlayabilir misiniz?
Andreas

1
Saçmalık. Örneğin, çeşitli yerlerde her türlü tek bit boyutuna ihtiyaç duyulan bir grafik kartında, her şey tam olarak gerekli boyutta yapılır, bir bit daha değil. Bir h.264 kod çözücünün bir işlem için 19 bit hassasiyete ihtiyacı varsa, donanım 20 veya 24 veya 32 yerine 19 bit uygular. Ve affedersiniz, litografik kalıpları değiştirmezsiniz. Donanımı tanımlar ve ardından düzeni oluşturan bazı yazılımlarla çalıştırırsınız.
gnasher729

1
@MartinMaat: Pazarlama + standardizasyonu teknolojik nedenlerle karıştırıyorsunuz. Ve tartıştığımız şey teknoloji.
gnasher729

0

Kelime genişlikleri her zaman iki güç değildir. Son zamanlarda numaralar için 32-bit kelime genişliği olan (ancak 48-bit genişliğinde) opcodes için değil bir SHArC DSP bazı kodlama yapıyordum .

Muhtemelen kelime genişliklerinin iki güç olmasının nedeni, tek bir biti test eden (veya ayarlayan veya temizleyen veya değiştiren) veya belirtilen sayıda bitle sola veya sağa kaydırma (veya döndürme) gibi bazı talimatlardan kaynaklanmaktadır. Opcode içinde, tek bitin konumunu veya kaydırılacak bit sayısını belirtmek için bir bit alanı vardır. Sözcük genişliği iki güçlüyse , bu bit alanı tüm sözcüğü kapsamak için günlük 2 (sözcük_genişliği) bitleri gerektirir . Yani, 32 bit genişliğindeki bir kelime, bu işlemler için opcode'ta 5 bitlik bir alana ihtiyaç duyar. Sözcük 33 bit genişliğinde olsaydı, 6'ya ihtiyacı olurdu, aksi takdirde tüm kelimeyi kapsayamazdı, ancak kelime 64 bit genişliğinde olsaydı da böyle olurdu.

Bir op koddaki bitler son derece değerlidir, bu yüzden genellikle onları boşa harcamak istemezler. Sonra kelimeyi 2 genişliğinde bir güç haline getirmek mantıklıdır.

Baytların 8 bit genişliğinde olmasının nedeni, bir ASCII karakterini (7 bit) tutabilen iki en küçük güç olmasıdır.


Bu benim uzmanlık alanım değil ama iki bayt VE kelime boyutunun gücü için geçerli bir neden gibi geliyor. UB için de daha az endişelenmen gerektiğini düşünüyorum. Bir kaydırma için 33-bit 6-bit opcode gerektirir, ancak olası değerlerin (0-32) sadece yarısının faydalı bir anlamı vardır. Kabul eder misin?
Andreas

opcode, vardiya sayısı için gereken bit alanından daha geniş olmalıdır. bir bayt, 8 bitlik bir sözcükten başka bir şey değildir. bilgisayar donanımının 8 veya 16 veya 32 veya 64 bit olan kelime boyutlarını kullanma eğiliminde olmasının nedeni (her zaman böyle değildir, eski DSP56000'in 24 bit sözcükleri vardı) yukarıda verdiğim nedenlerden ve vartec tarafından verilen nedenden kaynaklanıyor : paketlenmiş kelimelerin bitmap'i verildiğinde ve belirli bir pikselin satır ve sütun numarası verilirse, pikseli test etmek veya değiştirmek için hangi sözcüğe erişileceğini bilmek için sütun sayısını kelime genişliğine bölmek gerekir. 2 gücü ile bölmek kolaydır.
robert bristow-johnson

"Paketlenmiş kelimelerin bitmap'i" nedir? HighColor bu tanıma uyuyor mu?
Andreas

@ robertbristow-johnson: Toplam hayal gücü eksikliği. 9 bit bayt ile RGBA'da 16 milyon renk yerine 36 bit kelime, 13055 renk, RGB555 yerine RGB666 veya düşük kaliteli renk için canavarlık RGB565 kullanırdık ve her şey iyi olurdu. ASCII ise Latin Genişletilmiş'e kadar 512 karakter içerebilir.
gnasher729

@Andreas, hayır, iki "renk" demek istedim. tamamen beyaz veya tamamen siyah.
robert bristow-johnson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.