Bir kelime ve bayt arasındaki fark nedir?


98

Biraz araştırma yaptım. Bir bayt 8 bittir ve bir kelime hafızada adreslenebilen en küçük birimdir. Bir kelimenin tam uzunluğu değişir. Anlamadığım şey, bir bayta sahip olmanın anlamı nedir? Neden 8 bit demiyorsunuz?

Bu soruyu bir profesyonele sordum ve o günlerde çoğu makinenin bayt adresli olduğunu söyledi, ancak bu ne anlama gelir?


13
En iyisi, belirsizliği nedeniyle "kelime" teriminden kaçınmaktır. Veya 16-bit kelime, 32-bit kelime söyleyerek kesinleştirin ...
starblue

2
Bir kelimenin daha büyük veya daha küçük olması avantajlı mıdır?

2
@ quest4knoledge daha büyük bir kelime daha büyük işaretleyicilere (aka daha fazla RAM) ve daha büyük sayıların hızlı bir şekilde işlenmesine izin verir. Ayrıca, memset gibi bazı işlemlerin daha büyük bloklar halinde çalışarak daha hızlı olmasını sağlayabilir. Bununla birlikte, daha büyük bir kelimeye sahip işlemciler, işlemcide daha fazla transistör gerektirir ve biraz daha fazla enerji tüketebilir.
VoidStar

@VoidStar ve daha büyük bir kelime, daha küçük adres alanı anlamına gelir, yoksa kafam mı karıştı?

1
"Bir bayta sahip olmanın amacı nedir" sorusuna cevap vermek - bu geçmiş. CPU'lar bir "bayttan" daha büyük herhangi bir şeyi işleyebilmeye başlamadılar (daha önceki işlemciler sadece nybbles (4 bit) kullanıyordu, ancak terim hiçbir zaman gerçekten yakalandı). Herhangi bir notun ilk işlemcisi Intel 8086/8088 idi. "Baytlar" etrafında oluşturulan komutlarla başa çıkmak için tasarlandı, bu aynı zamanda belleğe hala xByte, örneğin GigaByte cinsinden atıfta bulunuyoruz çünkü adreslenebilir belleğin temel birimi bayttı. 'K, ilk PC'lerde 16 olan ve 64'e genişletilebilen KiloBytes'e bir referanstır - woo hoo!
Fred

Yanıtlar:


179

Bayt : Bugün, bir bayt neredeyse her zaman 8 bittir. Ancak, durum her zaman böyle değildi ve bunu dikte eden bir "standart" veya başka bir şey de yok. 8 bit çalışmak için uygun bir sayı olduğu için fiili standart haline geldi.

Kelime : Bir işlemcinin verileri işlediği doğal boyut (kayıt boyutu). Günümüzde karşılaşılan en yaygın kelime boyutları 8, 16, 32 ve 64 bittir, ancak diğer boyutlar da mümkündür. Örneğin, birkaç 36 bit makine ve hatta 12 bit makine vardı .

Bayt bir CPU için en küçük adreslenebilir birimdir. Tek bitleri ayarlamak / temizlemek istiyorsanız, önce karşılık gelen baytı bellekten almanız, bitlerle uğraşmanız ve ardından baytı belleğe geri yazmanız gerekir.

Kelimesinin aksine bir işlemci her seferinde (toplama ve çıkarma gibi) işlem yapmak için hangi bit büyük yığınıdır. Bazı işlemciler farklı görevler için farklı kelime boyutlarına sahip olabileceğinden bu tanım biraz belirsizdir (örneğin tam sayıya karşı kayan nokta işleme). Kelime boyutu, işlemlerin çoğunun çalıştığı şeydir .

Farklı işaretçi boyutuna sahip birkaç işlemci de vardır : örneğin, 8086, kayıtlarının 16 bit genişliğinde olduğu anlamına gelen 16 bitlik bir işlemcidir. Ancak işaretçileri (adresleri) 20 bit genişliğindedir ve iki 16 bitlik yazmaç belirli bir şekilde birleştirilerek hesaplanmıştır.


9
Mükemmel cevap. Sadece "kelime, bir işlemcinin aynı anda ... işlem yapabileceği en büyük bit yığınıdır " diyerek tartışırdım . Bu aslında en çok yaygın bitleri arasında öbek vb zaman içinde evrim geçirmiş mimarileri Lots onların en geniş olmayan bir kelime boyutuna sahip, ancak çoğu zaman onların en geniş değerleriyle neler yapabileceğini sınırlıdır.
Ross Patterson

13
Ekstra kredi için, yarım bayt için "yarım bayt" yaygın bir terimdir. Erken mikrobilgisayar CPU döneminde ( örneğin , Intel 8080) ortaya çıktı ve her zaman 4 bit olarak anlaşıldı, çünkü o zamana kadar bayt 8 bite düşmüştü.
Ross Patterson

7
Günümüzde 8 bitlik bir bayt standarttır; bkz. IEC 80000-13: 2008.
Antonio Rizzo

1
@DebanjanDhar: Evet, alakasızlar. Tek ilişki, bir sayfanın (AFAIK) her zaman kelime boyutunun bir katı olmasıdır.
DarkDust

4
x86 (her zamanki gibi) işleri karmaşıklaştırır: Intel terminolojisinde a word, varsayılan işlenen boyutunun 32 bit (dword) ve tamsayı yazmaç genişliğinin 64 bit (qword) olduğu modern x86 CPU'larda bile 16 bittir. Ve xmm yazmaçları 128 bit genişliğindedir ( movdqaçift ​​dörtlü hareket ettirin). Bellek veriyolu en az 64 bit genişliğindedir (ve 64 baytlık patlamalar halinde transferler = bir önbellek hattı) ve yürütme birimi önbellek yollarına en az 128 bit genişliğinde veya 256 veya hatta 512 bit genişliğindedir. Modern x86'nın yerel makine kelimesi boyutu ne olursa olsun, 16 bit değildir, ancak modern x86 hala 8086 terminolojisini kullanır.
Peter Cordes

16

Anlamadığım şey, bir bayta sahip olmanın anlamı nedir? Neden 8 bit demiyorsunuz?

Bir baytın mutlaka 8 bit olmadığı teknik noktanın dışında, bir terime sahip olmanın nedenleri basit insan doğasıdır:

  • çaba ekonomisi (tembellik olarak da bilinir) - "sekiz bit" yerine "bayt" demek daha kolaydır

  • kabilecilik - insan grupları, onları diğerlerinden ayırmak için jargon / özel bir dil kullanmayı sever.

Sadece çoğunluğa uy. 50+ yıllık birikmiş BT terminolojisini ve kültürel bagajı şikayet ederek değiştirmeyeceksiniz.


FWIW - "Donanım mimarisinden bağımsız 8 bit" demek istediğinizde kullanılacak doğru terim "sekizli" dir.


sekizlinin sadece baytın Fransızca çevirisi olduğunu sanıyordum, teşekkür ederim;)
Abdelouahab Pp

8

BAYT

Bu soruyu C ++ perspektifinden cevaplamaya çalışıyorum.

C ++ standardı, "baytı" "Yürütme ortamının temel karakter kümesinin herhangi bir üyesini tutacak kadar büyük adreslenebilir veri birimi" olarak tanımlar.

Bunun anlamı, baytın, uygulama için temel karakter kümesini barındırmak için en azından yeterli bitişik bitlerden oluşmasıdır. Diğer bir deyişle, olası değerlerin sayısı, farklı karakterlerin sayısına eşit veya ondan fazla olmalıdır. Amerika Birleşik Devletleri'nde, temel karakter setleri genellikle ASCII ve EBCDIC setleridir ve her biri 8 bit ile barındırılabilir. Bu nedenle, bir baytın en az 8 bit olacağı garanti edilir.

Başka bir deyişle, bayt, tek bir karakteri saklamak için gereken bellek miktarıdır.

C ++ uygulamanızda 'bit sayısını' doğrulamak istiyorsanız, 'limits.h' dosyasını kontrol edin. Aşağıdaki gibi bir girişi olmalıdır.

#define CHAR_BIT      8         /* number of bits in a char */

WORD

Bir Word, makine / sistem tarafından birlikte (yani bir denemede) işlenebilen belirli sayıda bit olarak tanımlanır. Alternatif olarak, Word'ün tek bir işlemde CPU ile RAM arasında aktarılabilecek veri miktarını tanımladığını söyleyebiliriz.

Bir bilgisayar makinesindeki donanım kayıtları kelime boyutundadır. Kelime boyutu ayrıca olası en büyük bellek adresini de tanımlar (her bellek adresi bayt boyutlu bir belleği işaret eder).

Not - C ++ programlarında, bellek adresleri bir sözcüğü değil bellek baytını gösterir.


6

Neden 8 bit demiyorsunuz?

Çünkü tüm makinelerde 8 bitlik bayt yok. Bu etiketlenmiş yana C, yukarı bak CHAR_BITiçinde limits.h.


6

Kelime, işlemcideki kayıtların boyutudur. Bu, add, mul, vb. Gibi işlemci komutlarının kelime boyutlu girişlerde olduğu anlamına gelir.

Ancak çoğu modern mimarinin 8 bitlik yığınlar halinde adreslenebilen belleği vardır, bu nedenle "bayt" sözcüğünü kullanmak daha uygundur.


Yani bir anlamda "bayt" terimi sadece kolaylık sağlamak için mi kullanılıyor?

Evet, "bayt" terim icat edildiğinde özellikle kullanışlıdır. Pek çok konvansiyon gibi, bir kez yerleştiklerinde ısrar ederler. Bayt tabanlı terminolojinin artık büyük resimde bilgisayarları anlamayı gerçekten daha kolay hale getirip getirmediğinden emin değilim, ancak bu baskın bir kongre ve yakın zamanda değişecek gibi değil.
VoidStar

Bayt, metinde karakter olarak kullanılan bir birim için kullanılan terimdir. Tarihsel olarak 6'dan 9 bit'e kadar boyutlarda bayt vardı.
starblue

@starblue Bir karakterin bir kelimeden daha az yer kaplaması nasıl mümkün olabilir?

1
@ quest4knoledge: çünkü bellek daha küçük parçalar halinde depolanır. Bir kelime 32 bittir (veya daha yeni makinelerde 64 bit). Tek tek karakterleri 1'e 1 işleyen bir algoritmada, yalnızca CPU'nun içindeyken tüm bir kelimeyi alırlar ve RAM'e geri yerleştirildiklerinde daha sıkı paketlenirler.
VoidStar

5

Bu bağlamda bir kelime, bir makinenin bellekle çalışırken kullandığı birimdir. Örneğin, 32 bitlik bir makinede sözcük 32 bit uzunluğunda ve 64 bitte 64 bit uzunluğundadır. Sözcük boyutu, adres alanını belirler.

Programlamada (C / C ++), kelime tipik int_ptrolarak bir işaretçi ile aynı uzunluğa sahip olan türle temsil edilir , bu şekilde bu ayrıntıları soyutlar.

Win32 API gibi bazı API'ler kafanızı karıştırabilir, çünkü WORD(16 bit) ve DWORD(32 bit) gibi türleri vardır . Bunun nedeni, API'nin başlangıçta 16 bit makineleri hedeflemesi, daha sonra 32 bit makinelere, ardından 64 bit makinelere taşınmasıdır. Bir işaretçiyi saklamak için kullanabilirsiniz INT_PTR. Burada ve burada daha fazla ayrıntı .


5

Görünüşe göre tüm cevaplar yüksek seviyeli dilleri ve özellikle C / C ++ 'ı varsaymaktadır.

Ancak soru "montaj" olarak etiketlendi ve bildiğim tüm birleştiricilerde (8 bit, 16 bit, 32 bit ve 64 bit CPU'lar için) tanımlar çok daha net:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")

3
Hayır, bu boyutlar yalnızca 16 bitlik bir makinede geçerlidir. Muhtemelen, 16 bitlik günlerinden kalma bir miras olduğu için bu makroları kullanan Windows programlamaya alışkınsınız ve MS bunu düzeltmek için uğraşmadı.
DarkDust

2
BTW, bir kelimenin boyutu (ve gerçekten bir bayt) değişebileceğinden, ISO-C, belirli bir bit boyutunda bir değişken / parametre istiyorsanız kullanılması gereken int<X>_tve uint<X>_ttürlerine (artı daha fazlasına) sahiptir.
DarkDust

@DarkDust burada assembly dili hakkında konuşuyoruz. C standartları ilgili değildir. BTW, 1980'den itibaren assembly programlıyorum ve aynı isimler kullanımdaydı. (belki qword hariç)
johnfound

Ancak, bir istisna buldum: GNU'da.word 32 bit olabilir (örneğin Sparc için ).
DarkDust

Üzgünüz, AS bir montajcı değil. Çirkin, sakat, sefil, mutant, tek amacı HLL derleyicileri için arka uç olmak için yaratılmış.
johnfound

3

Bir kelimenin tam uzunluğu değişir. Anlamadığım şey, bir bayta sahip olmanın anlamı nedir? Neden 8 bit demiyorsunuz?

Bir kelimenin uzunluğu değişse de, tüm modern makinelerde ve hatta aşina olduğum tüm eski mimarilerde, kelime boyutu hala bayt boyutunun bir katıdır. Dolayısıyla, değişken kelime boyutuyla ilişkili olarak "8 bit" üzerinden "bayt" kullanmanın belirli bir dezavantajı yoktur.

Bunun ötesinde, "8 bit" üzerinden bayt (veya sekizli 1 ) kullanmak için bazı nedenler şunlardır :

  1. Daha büyük birimler çok büyük veya çok küçük sayılardan kaçınmak için uygundur: "Neden 0.000000003 saniye diyebildiğinizde 3 nanosaniye söyleyin" veya "1.000 gram diyebildiğinizde neden 1 kilogram söyleyin" vb.
  2. Kolaylığın ötesinde, bir bayt birimi bir şekilde 1 bit kadar temeldir, çünkü birçok işlem tipik olarak bayt seviyesinde değil, bayt seviyesinde çalışır: hafızayı adresleme, dinamik depolama ayırma, bir dosyadan veya soketten okuma, vb.
  3. Bir birim türü olarak "8 bit" i kullansanız bile, "iki bayt" yerine "iki 8 bit" diyebilseniz bile, yeni biriminizin bir sayı ile başlaması genellikle çok kafa karıştırıcı olacaktır. Örneğin, biri "yüz 8 bit" derse, kolayca 100 bit yerine 108 bit olarak yorumlanabilir.

1 Bu cevap için bir baytın 8 bit olduğunu düşünecek olsam da, bu evrensel olarak doğru değil: eski makinelerde bir baytın farklı bir boyutu olabilir ( 6 bit gibi . Sekizli , makineden bağımsız olarak her zaman 8 bit anlamına gelir ( bu nedenle bu terim genellikle ağ protokollerinin tanımlanmasında kullanılır) Modern kullanımda, bayt ezici bir çoğunlukla 8 bit ile eşanlamlı olarak kullanılır.


2

Veri sayfalarında ve derleyicilerde bulunan terminoloji ne olursa olsun, bir 'Bayt' sekiz bittir. Araştırmacıları ve genellemeleri daha belirsiz istisnalarla karıştırmaya çalışmayalım, özellikle "Byte" kelimesi "Byte" ifadesinden geldiği için. Otuz yılı aşkın süredir yarı iletken / elektronik endüstrisinde çalıştım ve bir zamanlar 'Byte'ın sekiz bitten fazlasını ifade ettiği bilinmemektedir.


Olağandışı evet (bunu biliyoruz. Bir örnek, texas Instruments c54x Google texas enstrümanları c54x bayttır. Ti.com/lit/ug/spru393/spru393.pdf "'C55x talimatları, 8 bit ile 8 bit arasında değişen değişken bayt uzunluklarıdır. 48 bit. " Stackoverflow.com/questions/2098149/…
barlop

1
Oradan hiç gelmiyor. Terim aslında 1950'lerin sonlarında IBM'de W. Buchholtz tarafından icat edildi. Kaynak: bobbemer.com/BYTE.HTM . Bob Bemer'e göre, yazım hataları nedeniyle karışıklığı ("bit" ile) önlemek için "ısırık" yerine "bayt" yazımı seçilmiştir. O bilirdi. Oradaydı!
Stephen C

(Sadece 30 yıl mı? Sen sadece bir kırbaççısın. Doğal "bayt" boyutunun 8 bit olmadığı sistemlerde programlama yapmayı öğrendim :-))
Stephen C

1

Referans: https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

Bilgisayar depolamanın temel birimi bittir. Bir bit, 0 ve 1 olmak üzere iki değerden birini içerebilir. Bir bilgisayardaki diğer tüm depolama, bit koleksiyonlarına bağlıdır. Yeterince bit verildiğinde, bir bilgisayarın kaç şeyi temsil edebileceği şaşırtıcıdır: sayılar, harfler, resimler, filmler, sesler, belgeler ve programlar. Bir bayt 8 bittir ve çoğu bilgisayarda en küçük uygun depolama öbeğidir. Örneğin, çoğu bilgisayarda biraz hareket etme talimatı yoktur, ancak bir baytı taşımak için bir talimat vardır. Daha az yaygın bir terim, belirli bir bilgisayar mimarisinin yerel veri birimi olan kelimedir. Bir kelime, bir veya daha fazla bayttan oluşur. Örneğin, 64 bitlik kayıtları ve 64 bit bellek adreslemesi olan bir bilgisayar tipik olarak 64 bit (8 bayt) sözcüklere sahiptir. Bir bilgisayar, birçok işlemi aynı anda bir bayt yerine yerel kelime boyutunda yürütür. Bilgisayar depolama, çoğu bilgisayar verimi ile birlikte, genellikle baytlar ve bayt koleksiyonları olarak ölçülür ve işlenir. Bir kilobayt veya KB, megabayt başına 1.024 bayttır veya MB, bir gigabayt başına 1.024 bayt veya GB, 1.024 3 bayt terabayt veya TB, petabayt başına 1.024 4 bayt veya PB, 1.024 5 bayttır Bilgisayar üreticiler genellikle bu sayıları yuvarlar ve bir megabaytın 1 milyon bayt ve bir gigabaytın 1 milyar bayt olduğunu söyler. Ağ ölçümleri bu genel kuralın bir istisnasıdır; bitler halinde verilirler (çünkü ağlar verileri bir seferde biraz taşır) 024 5 bayt Bilgisayar üreticileri genellikle bu sayıları tamamlar ve bir megabaytın 1 milyon bayt ve bir gigabaytın 1 milyar bayt olduğunu söyler. Ağ ölçümleri bu genel kuralın bir istisnasıdır; bitler halinde verilirler (çünkü ağlar verileri bir seferde biraz taşır) 024 5 bayt Bilgisayar üreticileri genellikle bu sayıları tamamlar ve bir megabaytın 1 milyon bayt ve bir gigabaytın 1 milyar bayt olduğunu söyler. Ağ ölçümleri bu genel kuralın bir istisnasıdır; bitler halinde verilirler (çünkü ağlar verileri bir seferde biraz taşır)


-1

Bir makine bayt adreslenebilir ise ve bir kelime bellekte adreslenebilecek en küçük birimse, o zaman bir kelime bayt olacaktır!


Evet. TMS320C54xx (Texas Instruments'ın DSP'lerinden biri) üzerindeki adreslenebilir minimum bellek birimi 16 bit uzunluğundadır ve bu aynı zamanda genel amaçlı yazmaçlarının en küçük boyutudur. Ve TI C derleyicisi üzerinde char = short = int = 16 bit tanımlar.
Alexey Frunze

Hayır, çoğu RISC makineleri 32 bitlik kelime var, ama olabilir tek bayt yöneliktir. Örneğin MIPS'de word kesinlikle 32 bit anlamına gelir, ancak lb8 bit yükleyen bir (bayt yükleme) talimatı vardır.
Peter Cordes

-1

8 bitlik bir gruba bayt adı verilir (bazı mimariler için böyle olmaması dışında :))

Bir kelime , işlemcinin komut seti ve / veya donanımı tarafından bir birim olarak ele alınan sabit boyutlu bir bit grubudur. Bu, genel amaçlı bir yazmacın boyutunun (genellikle bir bayttan fazla olan) bir kelime olduğu anlamına gelir.

C'de, bir kelimeye genellikle tamsayı denir =>int


7
8 bitlik bir gruba sekizli denir.
cnicutar

2
doğru: Terim octet, bayt terimiyle ilişkili belirsizlik nedeniyle 8 bitlik bir diziyi açıkça belirtmek için tanımlanmıştır . Ama bytedaha
iyisinin

2
@tolitius: "Ama bytedaha iyisinin sesini seviyorum" için +1 : Bu konuda yalnız olmadığınızı ve birkaç niş sistem için güvenli olmadığınızı kuvvetle düşünüyorum, bir baytın "karışıklığı" muhtemelen 8 bitten farklı bir boyuttadır bu günlerde artık alakalı değil.
Joachim Sauer

-1

BYTE ve WORD terimleri, atıfta bulunulan işlemcinin boyutuna göredir. En yaygın işlemciler 8 bit, 16 bit, 32 bit veya 64 bittir. Bunlar işlemcinin WORD uzunluklarıdır. Aslında bir SÖZCÜK'ün yarısı, sayısal uzunluk ne olursa olsun bir BYTE'dir. Buna hazır, bir BYTE'nin yarısı bir NIBBLE.


Hayır, 32-bit word ve 8-bit byte (örneğin MIPS veya ARM) içeren CPU'larda yarım kelime 2 bayttır.
Peter Cordes

-3

Aslında, yaygın kullanımda, kelime, baytın 8 bit ile olduğu gibi, 16 bit ile eşanlamlı hale gelmiştir. 32 bitlik bir CPU'daki "kelime boyutu" 32 bit olduğu için biraz kafa karıştırıcı olabilir, ancak bir veri kelimesi söz konusu olduğunda 16 bit anlamına gelir. 32 bitlik kelime boyutuna sahip mikrodenetleyiciler, talimatlarını "uzun" olarak adlandırmaya başladılar (sözde kelime / çift kelime karmaşasından kaçınmak için).


1
Bu tamamen CPU tipine bağlıdır. Sizin de işaret ettiğiniz gibi, 32 bitlik, IA32 olmayan makinelerde, "kelime" genellikle 32 bittir.
Ross Patterson

2
@RossPatterson Bu tamamen yazılım geliştirmenize veya akşam yemeği yemenize bağlıdır.
Engineer

ARM / MIPS / diğer genel RISC mimarileri 32 bit sözcüklere sahiptir. Bu, kayıt genişliği (bu ISA'ların 32-bit versiyonunda) ve komut genişliğidir. 16 bit yarım kelimedir, bu nedenle ARM komutlarıldrh 16 bit yüklemeyi ve 32 bitlik bir yazmacıya sıfır genişletmeyi sever . Veya ldrsh16 bit yüklemek ve imzalamak için.
Peter Cordes
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.