Was ist der Unterschied zwischen einem Wort und einem Byte?


93

Ich habe einige Nachforschungen angestellt. Ein Byte besteht aus 8 Bits und ein Wort ist die kleinste Einheit, die im Speicher adressiert werden kann. Die genaue Länge eines Wortes variiert. Was ich nicht verstehe, ist, wozu ein Byte gut ist? Warum nicht 8 Bit sagen?

Ich habe einem Profi diese Frage gestellt und er sagte, dass die meisten Maschinen heutzutage byteadressierbar sind, aber was würde das für ein Wort bedeuten?


12
Es ist am besten, den Begriff "Wort" wegen seiner Mehrdeutigkeit zu vermeiden. Oder machen Sie es präzise, ​​indem Sie 16-Bit-Wort, 32-Bit-Wort, ...
starblue

2
Ist es vorteilhaft, wenn ein Wort größer oder kleiner ist?

2
@ quest4knoledge Ein größeres Wort ermöglicht größere Zeiger (auch bekannt als mehr RAM) und ermöglicht die schnelle Verarbeitung größerer Zahlen. Es kann auch ermöglichen, dass einige Vorgänge wie Memset schneller ausgeführt werden, indem in größeren Blöcken gearbeitet wird. Prozessoren mit einem größeren Wort benötigen jedoch mehr Transistoren im Prozessor und verbrauchen möglicherweise etwas mehr Energie.
VoidStar

@VoidStar und ein größeres Wort würden einen kleineren Adressraum bedeuten, oder bin ich verwirrt?

1
Um die Frage zu beantworten: "Was bringt es, ein Byte zu haben?" - es ist Geschichte. CPUs waren zunächst nicht in der Lage, etwas Größeres als ein "Byte" zu verarbeiten (frühere Prozessoren handhabten nur Nybbles (4 Bit), aber der Begriff hat sich nie wirklich durchgesetzt). Die erste CPU eines Hinweises war der Intel 8086/8088. Es wurde entwickelt, um Anweisungen zu verarbeiten, die um "Bytes" herum aufgebaut sind. Aus diesem Grund beziehen wir uns auch immer noch auf Speicher in xBytes, z. B. GigaBytes, da die Grundeinheit des adressierbaren Speichers das Byte war. 'K ist eine Referenz zu KiloBytes, von denen die ersten PCs 16 hatten, erweiterbar auf 64 - woo hoo!
Fred

Antworten:


169

Byte : Heute ist ein Byte fast immer 8 Bit. Dies war jedoch nicht immer der Fall und es gibt keinen "Standard" oder etwas, das dies vorschreibt. Da 8 Bit eine bequeme Zahl für die Arbeit ist, wurde sie zum De-facto-Standard.

Wort : Die natürliche Größe, mit der ein Prozessor Daten verarbeitet (die Registergröße). Die heute am häufigsten vorkommenden Wortgrößen sind 8, 16, 32 und 64 Bit, andere Größen sind jedoch möglich. Zum Beispiel gab es einige 36-Bit-Maschinen oder sogar 12-Bit-Maschinen .

Das Byte ist die kleinste adressierbare Einheit für eine CPU. Wenn Sie einzelne Bits setzen / löschen möchten, müssen Sie zuerst das entsprechende Byte aus dem Speicher abrufen, mit den Bits herumspielen und das Byte dann zurück in den Speicher schreiben.

Das Wort ist dagegen der größte Teil der Bits, mit denen ein Prozessor gleichzeitig eine Verarbeitung (wie Addition und Subtraktion) durchführen kann. Diese Definition ist etwas unscharf, da einige Prozessoren möglicherweise unterschiedliche Wortgrößen für unterschiedliche Aufgaben haben (z. B. Ganzzahl- oder Gleitkomma-Verarbeitung). Die Wortgröße ist das, womit die meisten Operationen arbeiten.

Es gibt auch einige Prozessoren mit einer anderen Zeigergröße : Beispielsweise ist der 8086 ein 16-Bit-Prozessor, was bedeutet, dass seine Register 16 Bit breit sind. Die Zeiger (Adressen) sind jedoch 20 Bit breit und wurden berechnet, indem zwei 16-Bit-Register auf bestimmte Weise kombiniert wurden.


9
Hervorragende Antwort. Ich würde nur mit " [t] das Wort ist im Gegensatz dazu der größte Teil der Bits, mit denen ein Prozessor verarbeiten kann ... auf einmal " streiten . Es ist in der Tat der häufigste Teil von Bits usw. Viele Architekturen, die sich im Laufe der Zeit entwickelt haben, haben eine Wortgröße, die nicht ihre breiteste ist, aber sie sind oft in ihren Möglichkeiten mit ihren breitesten Werten begrenzt.
Ross Patterson

11
Für zusätzliches Guthaben ist ein "Knabbern" eine gebräuchliche Bezeichnung für ein halbes Byte. Es entstand während der frühen Ära der Mikrocomputer-CPU ( z. B. Intel 8080) und wurde immer als 4 Bit verstanden, da sich das Byte bis dahin auf 8 Bit beruhigt hatte.
Ross Patterson

6
Heute ist ein 8-Bit-Byte ein Standard. siehe IEC 80000-13: 2008.
user2431763

1
@DebanjanDhar: Ja, sie haben nichts miteinander zu tun. Die einzige Beziehung ist, dass eine Seite (AFAIK) immer ein Vielfaches der Wortgröße ist.
DarkDust

4
x86 (wie üblich) macht die Sache kompliziert: In der Intel-Terminologie wordbeträgt a 16 Bit, selbst auf modernen x86-CPUs, bei denen die Standardoperandengröße 32 Bit (dword) und die ganzzahlige Registerbreite 64 Bit (qword) beträgt. Und xmm-Register sind 128 Bit breit ( movdqaDoppelquadrat verschieben). Der Speicherbus ist mindestens 64 Bit breit (und überträgt in Bursts von 64 Bytes = eine Cache-Zeile), und die Pfade von Ausführungseinheit zu Cache sind mindestens 128 Bit breit oder 256 oder sogar 512 Bit breit. Was auch immer die native Maschinenwortgröße von modernem x86 ist, es sind keine 16 Bit, aber modernes x86 verwendet immer noch die 8086-Terminologie.
Peter Cordes

16

Was ich nicht verstehe, ist, wozu ein Byte gut ist? Warum nicht 8 Bit sagen?

Abgesehen von dem technischen Punkt, dass ein Byte nicht unbedingt 8 Bit ist, sind die Gründe für einen Begriff einfache menschliche Natur:

  • Wirtschaftlichkeit (auch bekannt als Faulheit) - es ist einfacher , "Byte" als "acht Bits" zu sagen.

  • Tribalismus - Gruppen von Menschen verwenden gerne Jargon / eine private Sprache, um sie von anderen abzuheben.

Nur mit dem Strom schwimmen. Sie werden nicht mehr als 50 Jahre angesammelte IT-Terminologie und kulturelles Gepäck ändern, wenn Sie sich darüber beschweren.


FWIW - der richtige Begriff für "8 Bit unabhängig von der Hardwarearchitektur" ist "Oktett".


Ich dachte, das Oktett sei nur die französische Übersetzung des Bytes, danke;)
Abdelouahab Pp

8

BYTE

Ich versuche diese Frage aus C ++ - Perspektive zu beantworten.

Der C ++ - Standard definiert "Byte" als "Adressierbare Dateneinheit, die groß genug ist, um ein Mitglied des Basiszeichensatzes der Ausführungsumgebung aufzunehmen".

Dies bedeutet, dass das Byte aus mindestens genügend benachbarten Bits besteht, um den Basiszeichensatz für die Implementierung aufzunehmen. Das heißt, die Anzahl der möglichen Werte muss gleich oder größer als die Anzahl der unterschiedlichen Zeichen sein. In den Vereinigten Staaten sind die Grundzeichensätze normalerweise die ASCII- und EBCDIC-Sätze, von denen jeder mit 8 Bits aufgenommen werden kann. Somit ist garantiert, dass ein Byte mindestens 8 Bits hat.

Mit anderen Worten, ein Byte ist die Speichermenge, die zum Speichern eines einzelnen Zeichens erforderlich ist.

Wenn Sie die Anzahl der Bits in Ihrer C ++ - Implementierung überprüfen möchten, überprüfen Sie die Datei 'Limits.h'. Es sollte einen Eintrag wie unten haben.

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

WORT

Ein Wort ist definiert als eine bestimmte Anzahl von Bits, die von der Maschine / dem System zusammen (dh in einem Versuch) verarbeitet werden können. Alternativ können wir sagen, dass Word die Datenmenge definiert, die in einer einzigen Operation zwischen CPU und RAM übertragen werden kann.

Die Hardwareregister in einer Computermaschine haben eine Wortgröße. Die Wortgröße definiert auch die größtmögliche Speicheradresse (jede Speicheradresse zeigt auf einen Speicher mit Byte-Größe).

Hinweis - In C ++ - Programmen verweisen die Speicheradressen auf ein Byte Speicher und nicht auf ein Wort.


6

Warum nicht 8 Bit sagen?

Weil nicht alle Maschinen 8-Bit-Bytes haben. Da Sie dies markiert haben C, schauen Sie CHAR_BITin nach limits.h.


6

Ein Wort ist die Größe der Register im Prozessor. Dies bedeutet, dass Prozessoranweisungen wie "Add", "Mul" usw. auf wortgroßen Eingaben ausgeführt werden.

Die meisten modernen Architekturen verfügen jedoch über einen Speicher, der in 8-Bit-Blöcken adressierbar ist. Daher ist es zweckmäßig, das Wort "Byte" zu verwenden.


In gewisser Weise wird der Begriff "Byte" nur der Einfachheit halber verwendet?

Ja, "Byte" war besonders praktisch, als der Begriff erfunden wurde. Wie viele Konventionen bleiben sie bestehen, sobald sie sich etabliert haben. Ich bin mir nicht sicher, ob die bytebasierte Terminologie Computer im Großen und Ganzen wirklich leichter verständlich macht, aber es ist die vorherrschende Konvention und wird sich nicht so schnell ändern.
VoidStar

Byte ist der Begriff für eine Einheit, die als Zeichen im Text verwendet wurde. Historisch gesehen gab es Bytes mit Größen von 6 bis 9 Bit.
Starblue

@starblue wie ist es möglich, dass ein char weniger platz als ein wort einnimmt?

1
@ quest4knoledge: weil der Speicher in kleineren Stücken dieser Wörter gespeichert ist. Ein Wort ist 32 Bit (oder 64 Bit auf neueren Computern). In einem Algorithmus, der einzelne Zeichen 1 zu 1 verarbeitet, nehmen sie nur dann ein ganzes Wort auf, wenn sie sich in der CPU befinden, und wenn sie wieder in den Arbeitsspeicher gestellt werden, sind sie enger gepackt.
VoidStar

5

In diesem Zusammenhang ist ein Wort die Einheit, die eine Maschine beim Arbeiten mit dem Speicher verwendet. Auf einer 32-Bit-Maschine ist das Wort beispielsweise 32 Bit lang und auf einer 64-Bit-Maschine 64 Bit lang. Die Wortgröße bestimmt den Adressraum.

Bei der Programmierung (C / C ++) wird das Wort normalerweise durch den int_ptrTyp dargestellt, der dieselbe Länge wie ein Zeiger hat, wodurch diese Details abstrahiert werden.

Einige APIs können Sie jedoch verwirren, z. B. die Win32-API, da sie Typen wie WORD(16 Bit) und DWORD(32 Bit) enthält. Der Grund dafür ist, dass die API ursprünglich auf 16-Bit-Computer abzielte, dann auf 32-Bit-Computer und dann auf 64-Bit-Computer portiert wurde. Zum Speichern eines Zeigers können Sie verwenden INT_PTR. Weitere Details hier und hier .


4

Es scheint, dass alle Antworten Hochsprachen und hauptsächlich C / C ++ voraussetzen.

Die Frage ist jedoch mit "Assembly" gekennzeichnet, und in allen mir bekannten Assemblern (für 8-Bit-, 16-Bit-, 32-Bit- und 64-Bit-CPUs) sind die Definitionen viel klarer:

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

3
Nein, diese Größen sind nur auf einem 16-Bit-Computer gültig. Sie sind wahrscheinlich an die Windows-Programmierung gewöhnt, die diese Makros immer noch verwendet, da es sich um ein Erbe aus den 16-Bit-Tagen handelt und MS sich nicht die Mühe gemacht hat, dies zu korrigieren.
DarkDust

2
Übrigens, da die Größe eines Wortes (und tatsächlich sogar eines Bytes) variieren kann, verfügt ISO-C über die Typen int<X>_tund uint<X>_t(plus mehr), die verwendet werden sollten, wenn Sie eine Variable / einen Parameter mit einer bestimmten Bitgröße wünschen.
DarkDust

@ DarkDust wir sprechen hier über Assemblersprache. C-Standards sind nicht relevant. Übrigens programmiere ich Assembly ab 1980 und der gleiche Name wurde verwendet. (Nun, vielleicht außer Qword)
Johnfound

Ich habe jedoch eine Ausnahme gefunden: In GNU as .wordkönnen dies 32 Bit sein (zum Beispiel für Sparc ).
DarkDust

Entschuldigung, AS ist kein Assembler. Es ist eine hässliche, verkrüppelte, elende Mutante, die mit dem einzigen Ziel erstellt wurde, ein Back-End für die HLL-Compiler zu sein.
Johnfound

3

Die genaue Länge eines Wortes variiert. Was ich nicht verstehe, ist, wozu ein Byte gut ist? Warum nicht 8 Bit sagen?

Obwohl die Länge eines Wortes variiert, ist die Wortgröße auf allen modernen Maschinen und sogar allen älteren Architekturen, mit denen ich vertraut bin, immer noch ein Vielfaches der Bytegröße. Es gibt also keinen besonderen Nachteil bei der Verwendung von "Byte" über "8 Bits" in Bezug auf die variable Wortgröße.

Darüber hinaus gibt es einige Gründe, Byte (oder Oktett 1 ) über "8 Bits" zu verwenden:

  1. Größere Einheiten sind nur praktisch, um sehr große oder sehr kleine Zahlen zu vermeiden: Sie können auch fragen: "Warum sagen Sie 3 Nanosekunden, wenn Sie 0,000000003 Sekunden sagen könnten?" Oder "Warum sagen Sie 1 Kilogramm, wenn Sie 1000 Gramm sagen könnten" usw.
  2. Abgesehen von der Bequemlichkeit ist die Einheit eines Bytes irgendwie so grundlegend wie 1 Bit, da viele Operationen normalerweise nicht auf Byte-Ebene, sondern auf Byte-Ebene funktionieren: Adressieren des Speichers, Zuweisen von dynamischem Speicher, Lesen aus einer Datei oder einem Socket usw.
  3. Selbst wenn Sie "8 Bit" als Einheitentyp verwenden würden, also "zwei 8 Bit" anstelle von "zwei Bytes" sagen könnten, wäre es oft sehr verwirrend, wenn Ihre neue Einheit mit einer Zahl beginnt. Wenn zum Beispiel jemand "einhundert 8-Bit" sagt, kann dies leicht als 108 Bit anstatt als 100 Bit interpretiert werden.

1 Obwohl ich für diese Antwort ein Byte als 8 Bit betrachte, trifft dies nicht allgemein zu: Auf älteren Computern kann ein Byte eine andere Größe haben (z. B. 6 Bit . Oktett bedeutet immer 8 Bit, unabhängig von der Maschine ( Daher wird dieser Begriff häufig bei der Definition von Netzwerkprotokollen verwendet. In der modernen Verwendung wird Byte überwiegend als Synonym für 8 Bit verwendet.


2

Unabhängig von der Terminologie in Datenblättern und Compilern besteht ein 'Byte' aus acht Bits. Versuchen wir nicht, Nachfrager und Allgemeines mit den dunkeleren Ausnahmen zu verwechseln, zumal das Wort "Byte" aus dem Ausdruck "By Eight" stammt. Ich habe über dreißig Jahre in der Halbleiter- / Elektronikindustrie gearbeitet und nicht einmal bekannt, dass "Byte" mehr als acht Bits ausdrückt.


Ungewöhnliches Ja (das wissen wir. Ein Beispiel ist: Die Texas-Instrumente c54x Google Texas-Instrumente c54x Byte. Ti.com/lit/ug/spru393/spru393.pdf "Die 'C55x-Anweisungen sind variable Bytelängen mit einer Größe von 8 Bit bis 48 Bits. " Stackoverflow.com/questions/2098149/…
Barlop

1
Es kommt überhaupt nicht von dort. Der Begriff wurde Ende der 1950er Jahre von W. Buchholtz bei IBM geprägt. Quelle: bobbemer.com/BYTE.HTM . Laut Bob Bemer wurde die Schreibweise "Byte" anstelle von "Biss" gewählt, um Verwechslungen (mit "Bit") aufgrund von Tippfehlern zu vermeiden. Er würde es wissen. Er war dort!
Stephen C

(Nur 30 Jahre? Sie sind nur ein Whipper-Snapper. Ich habe gelernt, auf Systemen zu programmieren, bei denen die natürliche "Byte" -Größe nicht 8 Bit betrug :-))
Stephen C

1

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

Die Grundeinheit des Computerspeichers ist das Bit. Ein Bit kann einen von zwei Werten enthalten, 0 und 1. Alle anderen Speicher in einem Computer basieren auf Sammlungen von Bits. Bei genügend Bits ist es erstaunlich, wie viele Dinge ein Computer darstellen kann: Zahlen, Buchstaben, Bilder, Filme, Töne, Dokumente und Programme, um nur einige zu nennen. Ein Byte besteht aus 8 Bit und ist auf den meisten Computern der kleinste praktische Speicherblock. Zum Beispiel haben die meisten Computer keine Anweisung, ein bisschen zu verschieben, aber eine, um ein Byte zu verschieben. Ein weniger gebräuchlicher Begriff ist das Wort, bei dem es sich um die native Dateneinheit einer bestimmten Computerarchitektur handelt. Ein Wort besteht aus einem oder mehreren Bytes. Beispielsweise verfügt ein Computer mit 64-Bit-Registern und 64-Bit-Speicheradressierung normalerweise über 64-Bit-Wörter (8 Byte). Ein Computer führt viele Operationen in seiner nativen Wortgröße und nicht in einem Byte gleichzeitig aus. Computerspeicher, wird zusammen mit dem größten Teil des Computerdurchsatzes im Allgemeinen in Bytes und Sammlungen von Bytes gemessen und bearbeitet. Ein Kilobyte oder KB ist 1.024 Bytes pro Megabyte oder MB ist 1.024 2 Bytes pro Gigabyte oder GB ist 1.024 3 Bytes pro Terabyte oder TB ist 1.024 4 Bytes pro Petabyte oder PB ist 1.024 5 Bytes Computer Hersteller runden diese Zahlen häufig ab und sagen, dass ein Megabyte 1 Million Bytes und ein Gigabyte 1 Milliarde Bytes entspricht. Netzwerkmessungen sind eine Ausnahme von dieser allgemeinen Regel. Sie werden in Bits angegeben (da Netzwerke Daten bitweise verschieben). 024 5 Bytes Computerhersteller runden diese Zahlen häufig ab und sagen, dass ein Megabyte 1 Million Bytes und ein Gigabyte 1 Milliarde Bytes entspricht. Netzwerkmessungen sind eine Ausnahme von dieser allgemeinen Regel. Sie werden in Bits angegeben (da Netzwerke Daten bitweise verschieben). 024 5 Bytes Computerhersteller runden diese Zahlen häufig ab und sagen, dass ein Megabyte 1 Million Bytes und ein Gigabyte 1 Milliarde Bytes entspricht. Netzwerkmessungen sind eine Ausnahme von dieser allgemeinen Regel. Sie werden in Bits angegeben (da Netzwerke Daten bitweise verschieben).


-1

Wenn eine Maschine byteadressierbar ist und ein Wort die kleinste Einheit ist, die im Speicher adressiert werden kann, dann wäre ein Wort vermutlich ein Byte!


Ja. Die minimal adressierbare Speichereinheit des TMS320C54xx (einer der DSPs von Texas Instruments) ist 16 Bit lang, was auch die kleinste Größe seiner Allzweckregister darstellt. Und der TI C-Compiler definiert darauf char = short = int = 16 Bit.
Alexey Frunze

Nein, die meisten RISC-Maschinen haben 32-Bit-Wörter, können jedoch einzelne Bytes adressieren. Auf MIPS bedeutet das word definitiv 32 Bit, aber es gibt einen lbBefehl (Ladebyte), der 8 Bit lädt.
Peter Cordes

-1

Eine Gruppe von 8 Bits wird als Byte bezeichnet (mit der Ausnahme, dass dies bei bestimmten Architekturen nicht der Fall ist :).

Ein Wort ist eine Gruppe von Bits fester Größe, die vom Befehlssatz und / oder der Hardware des Prozessors als Einheit behandelt werden. Das heißt, die Größe eines Allzweckregisters (das im Allgemeinen mehr als ein Byte beträgt) ist ein Wort

Im C wird ein Wort am häufigsten als Ganzzahl bezeichnet =>int


7
Eine Gruppe von 8 Bits wird als Oktett bezeichnet.
cnicutar

2
richtig: Der Begriff octetwurde definiert, um eine Folge von 8 Bits aufgrund der mit dem Begriff Byte verbundenen Mehrdeutigkeit explizit zu bezeichnen . Aber ich mag den Klang bytebesser :)
Tolitius

2
@tolitius: +1 für "Aber ich mag den Klang bytebesser": Ich vermute sehr, dass Sie damit nicht allein und sicher für ein paar Nischensysteme sind, wobei die "Verwirrung" eines Bytes möglicherweise eine andere Größe als 8-Bit hat ist heutzutage nicht mehr relevant.
Joachim Sauer

-1

Die Begriffe BYTE und WORD beziehen sich auf die Größe des Prozessors, auf den verwiesen wird. Die gängigsten Prozessoren sind / waren 8 Bit, 16 Bit, 32 Bit oder 64 Bit. Dies sind die WORD-Längen des Prozessors. Tatsächlich ist die Hälfte eines WORTES ein BYTE, unabhängig von der numerischen Länge. Bereit dafür ist die Hälfte eines BYTE eine NIBBLE.


Nein, in CPUs mit 32-Bit-Wörtern und 8-Bit-Bytes (z. B. MIPS oder ARM) besteht ein halbes Wort aus 2 Bytes.
Peter Cordes

-3

Tatsächlich ist das Wort im allgemeinen Sprachgebrauch zum Synonym für 16 Bit geworden, ähnlich wie das Byte mit 8 Bit. Kann etwas verwirrend sein, da die "Wortgröße" auf einer 32-Bit-CPU 32-Bit beträgt, aber wenn man von einem Datenwort spricht, würde man 16-Bit bedeuten. Mikrocontroller mit einer Wortgröße von 32 Bit haben es sich zur Aufgabe gemacht, ihre Anweisungen "longs" zu nennen (angeblich, um die Verwechslung von Wörtern und Doppelwörtern zu vermeiden).


1
Das hängt ganz vom CPU-Typ ab. Wie Sie hervorheben, besteht ein "Wort" auf 32-Bit-Nicht-IA32-Computern normalerweise aus 32 Bit.
Ross Patterson

2
@ RossPatterson Das hängt ganz davon ab, ob Sie Software entwickeln oder zu Abend essen.
Ingenieur

ARM / MIPS / andere gängige RISC-Architekturen enthalten 32-Bit-Wörter. Dies ist die Registerbreite (in der 32-Bit-Version dieser ISAs) und die Befehlsbreite. 16 Bit ist ein Halbwort, daher laden ARM-Befehle gerneldrh 16 Bit und erweitern es auf Null in ein 32-Bit-Register. Oder ldrshum 16 Bit zu laden und zu erweitern.
Peter Cordes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.