In diesem Tutorial zur Baugruppenprogrammierung habe ich gelesen, dass 8 Bits für Daten verwendet werden, während 1 Bit für die Parität verwendet wird, die dann zum Erkennen von Paritätsfehlern (verursacht durch Hardwarefehler oder elektrische Störungen) verwendet wird.
Ist das wahr?
Antworten:
Ein Datenbyte besteht aus acht Bits, es kann mehr Bits pro Datenbyte geben, die im Betriebssystem oder sogar auf Hardwareebene für die Fehlerprüfung verwendet werden (Paritätsbit oder sogar ein erweitertes Fehlererkennungsschema), die Daten bestehen jedoch aus acht Bits Bits und jedes Paritätsbit ist normalerweise für die Software unsichtbar. Ein Byte wurde standardisiert, um "acht Datenbits" zu bedeuten. Der Text ist nicht falsch zu sagen, dass möglicherweise mehr Bits zum Speichern eines Datenbytes als die acht Datenbits vorgesehen sind, aber diese werden normalerweise nicht als Teil des Bytes an sich betrachtet. Der Text selbst weist auf diese Tatsache hin.
Sie können dies im folgenden Abschnitt des Tutorials sehen:
4 * 8 = 32, es kann tatsächlich 36 Bit im System beanspruchen, aber für Ihre Absichten und Zwecke sind es nur 32 Bit.
quelle
char
in C (worum es bei der Verknüpfung geht) genau die kleinste adressierbare Speichereinheit ist. Es heißt nur char , aber der C-Standard macht es auch zu byte .Herkömmlicherweise kann ein Byte eine beliebige Größe haben und ist nur die kleinste adressierbare Speichereinheit. Heutzutage sind 8-Bit-Bytes für Software so ziemlich standardisiert. Wie JustAnotherSoul sagte, kann die Hardware mehr Bits als die 8 Datenbits speichern.
Wenn Sie an programmierbaren Logikbausteinen wie FPGAs arbeiten, werden Sie möglicherweise feststellen, dass deren interner Speicher häufig als 9-Bit-Chunks adressierbar ist, und als HDL-Autor können Sie dieses neunte Bit zur Fehlerprüfung oder nur zum Speichern größerer Mengen verwenden von Daten pro "Byte". Beim Kauf von Speicherchips für kundenspezifische Hardware haben Sie im Allgemeinen die Wahl zwischen 8- oder 9-Bit-adressierbaren Einheiten (oder 16/18, 32/36 usw.), und dann liegt es an Ihnen, ob Sie 9-Bit- "Bytes" haben und welche Du machst das mit dem 9. Bit, wenn du es haben willst.
quelle
Dieser Text ist äußerst schlecht formuliert. Er spricht mit ziemlicher Sicherheit von ECC - RAM (Error Correction Code) .
Der ECC-RAM speichert normalerweise Informationen im Wert von 8 Bit unter Verwendung von 9 Bit. Das zusätzliche Bit pro Byte wird zum Speichern von Fehlerkorrekturcodes verwendet.
(In beiden Fällen ist jedes Byte über jeden Chip verteilt. Mit freundlicher Genehmigung von Puget Systems )
Dies alles ist für Benutzer der Hardware völlig unsichtbar. In beiden Fällen sieht Software, die diesen RAM verwendet, 8 Bits pro Byte.
Übrigens: Fehlerkorrekturcodes im RAM sind normalerweise nicht wirklich 1 Bit pro Byte. Sie sind stattdessen 8 Bits pro 8 Bytes. Dies hat den gleichen Platzaufwand, hat jedoch einige zusätzliche Vorteile. Siehe SECDED für weitere Informationen.
quelle
Im Allgemeinen lautet die kurze Antwort: Ein Byte besteht aus 8 Bits. Dies vereinfacht die Angelegenheit zu stark (manchmal sogar bis zur Ungenauigkeit), ist jedoch die Definition, mit der die meisten Menschen (einschließlich einer großen Anzahl von Programmierern) vertraut sind, und die Definition wird von fast allen standardmäßig verwendet (unabhängig von der Anzahl der unterschiedlich großen Bytes). musste arbeiten mit).
Insbesondere ist ein Byte die kleinste adressierbare Speichereinheit für die gegebene Architektur und ist im Allgemeinen groß genug, um ein einzelnes Textzeichen aufzunehmen. In den meisten modernen Architekturen ist ein Byte als 8 Bit definiert. ISO / IEC 80000-13 spezifiziert auch, dass ein Byte 8 Bits hat, ebenso wie der allgemeine Konsens (was bedeutet, dass, wenn Sie von 9-Bit-Bytes sprechen, Sie auf ein Byte stoßen werden) Menge Probleme stoßen, es sei denn, Sie führen dies ausdrücklich aus) Geben Sie an, dass Sie keine normalen Bytes meinen.
Es gibt jedoch Ausnahmen von dieser Regel. Zum Beispiel:
sizeof(char)
, während indirekt angegeben wird, dass achar
mindestens 8 Bit betragen muss, jedes Byte eine eindeutige Adresse haben muss und zwischen benachbarten Bytes keine Leerzeichen sein dürfen in Erinnerung. Dies soll die Sprachen portabler machen, als dies der Fall wäre, wenn explizit 8-Bit-Bytes erforderlich wären. [Die Anzahl der Bits in einem Byte wirdCHAR_BIT
in C-Bibliotheks-Header "limits" angegeben (limits.h
in C,climits
in C ++).]In den meisten Fällen besteht ein Byte also im Allgemeinen aus 8 Bits. Wenn nicht, sind es wahrscheinlich 9 Bits und können Teil eines 36-Bit-Wortes sein oder auch nicht.
quelle
Beachten Sie, dass der Begriff Byte ohne Kontext nicht genau definiert ist. In Bezug auf Computerarchitekturen kann man zumindest für moderne Architekturen davon ausgehen, dass ein Byte 8-Bit ist. Dies wurde weitgehend durch Programmiersprachen wie C standardisiert, für die Bytes erforderlich waren mindestens 8 Bits jedoch keine Garantie für größere Bytes gegeben ist. macht 8 Bits pro Byte zur einzigen sicheren Annahme.
Es gibt Computer mit adressierbaren Einheiten, die größer als 8 Bit sind (normalerweise 16 oder 32). Diese Einheiten werden jedoch normalerweise als Maschinenwörter und nicht als Bytes bezeichnet. Beispielsweise würde ein DSP mit 32K 32-Bit-RAM-Wörtern mit 128 KB oder RAM und nicht mit 32 KB angekündigt.
Was Kommunikationsstandards betrifft, sind die Dinge nicht so genau definiert. ASCII ist immer noch weit verbreitet und hat 7-Bit-Bytes (die gut in 8-Bit-Bytes auf Computern passen). UART-Transceiver werden immer noch mit konfigurierbarer Bytegröße hergestellt (normalerweise können Sie mindestens 6, 7 und 8 Bits pro Byte auswählen, aber 5 und 9 sind keine Seltenheit).
quelle
Ein Byte wird normalerweise als die kleinste einzeln adressierbare Einheit des Speicherplatzes definiert. Es kann jede Größe sein. Es gab Architekturen mit Byte-Größen zwischen 6 und 9 Bit, vielleicht sogar größer. Es gibt auch Architekturen, bei denen die einzige adressierbare Einheit die Größe des Busses ist. Bei solchen Architekturen können wir entweder sagen, dass sie einfach kein Byte haben , oder das Byte hat die gleiche Größe wie das Wort (in einem bestimmten Fall weiß ich, dass dies der Fall ist) 32 Bit sein); In beiden Fällen ist es definitiv nicht 8 Bit. Ebenso gibt es bitadressierbare Architekturen. Auf diesen Architekturen könnten wir wiederum argumentieren, dass Bytes einfach nicht existieren, oder wir könnten argumentieren, dass Bytes 1 Bit sind. So oder so ist eine sinnvolle Definition, aber 8 Bit ist definitiv falsch.
In vielen allgemeinen Standardarchitekturen enthält ein Byte 8 Bit. Dies ist jedoch nicht garantiert. Je weiter Sie sich vom Mainstream und / oder von Allzweck-CPUs entfernen, desto wahrscheinlicher werden Sie auf Nicht-8-Bit-Bytes stoßen. Dies geht so weit, dass einige hoch portable Software sogar die Größe konfigurierbar macht. Beispielsweise enthielten ältere Versionen von GCC ein Makro namens
BITS_PER_BYTE
(oder so ähnlich), das die Größe eines Bytes für eine bestimmte Architektur konfigurierte. Ich glaube, einige ältere Versionen von NetBSD könnten auf Nicht-8-Bit-pro-Byte-Architekturen ausgeführt werden.Wenn Sie wirklich betonen möchten, dass es sich nicht um die kleinste adressierbare Speicherkapazität handelt, sondern um eine exakte 8-Bit-Speicherkapazität, wie groß sie auch sein mag, können Sie den Begriff Oktett verwenden , der beispielsweise in vielen neueren RfCs verwendet wird.
quelle
CHAR_BIT
(gefunden inlimits.h
), mir ist nicht bekanntBITS_PER_BYTE
Als ich 1960 mit dem Programmieren anfing, hatten wir 48-Bit-Wörter mit 6-Bit-Bytes - sie hießen damals nicht so, sie hießen Zeichen. Dann habe ich am Golem-Computer mit 75-Bit-Wörtern und 15-Bit-Bytes gearbeitet. Später waren 6-Bit-Bytes die Norm, bis IBM die 360 herausbrachte, und heutzutage entspricht ein Byte üblicherweise einem Oktett, dh 8-Bit-Daten. Einige Hardware verfügte über zusätzliche Bits zur Fehlererkennung und möglicherweise zur Fehlerkorrektur, auf die die Software jedoch nicht zugreifen konnte.
quelle
Ein Byte besteht aus 8 Bits.
In der fernen Vergangenheit gab es unterschiedliche Definitionen eines Erinnerungsworts und eines Bytes. Die Annahme, dass diese Mehrdeutigkeit im heutigen Leben weit verbreitet oder weit verbreitet ist, ist falsch.
Seit mindestens den späten 1970er Jahren besteht ein Byte aus 8 Bits. Die Massenbevölkerung von Heimcomputern und PCs hat in ihrer Dokumentation eindeutig ein Byte als 8-Bit-Wert verwendet, ebenso wie alle Datenblätter und Dokumentationen für Diskettenlaufwerke, Festplattenlaufwerke und PROM / EPROM / EEPROM / Flash-EPROM / SRAM / SDRAM-Speicherchips, die ich in diesem Zeitraum gelesen habe. (Und ich habe in dieser Zeit persönlich sehr viel darüber gelesen.) Ethernet und einige andere Kommunikationsprotokolle sind für mich ungewöhnlich, wenn es um Oktette geht.
Die Mehrdeutigkeit des Begriffs Byte ist selbst eine seltene und dunkle Sache. Sehr, sehr wenige Programmierer, Konstrukteure, Testingenieure, Verkäufer, Servicetechniker oder durchschnittliche Kunden in den letzten 30 Jahren oder mehr würden denken, dass dies etwas anderes als einen 8-Bit-Wert bedeutet, wenn sie das Wort überhaupt erkennen .
Wenn ein Byte von der Hardware verarbeitet wird, z. B. wenn es in Speicherchips gespeichert ist oder über eine Leitung übertragen wird, fügt die Hardware dem Byte möglicherweise redundante Daten hinzu. Dies kann später bei der Erkennung von Hardwarefehlern hilfreich sein, so dass unzuverlässige Daten erkannt und verworfen werden können (z. B. Parität, Prüfsumme, CRC). Oder es können Fehler in den Daten korrigiert und die Daten wiederhergestellt werden (z. B. ECC). In beiden Fällen werden die redundanten Daten verworfen, wenn das Byte abgerufen oder zur weiteren Verarbeitung empfangen wurde. Das Byte bleibt der zentrale 8-Bit-Wert und die redundanten Daten bleiben redundante Daten.
quelle
Erstens scheint das Tutorial, auf das Sie verweisen, ziemlich veraltet zu sein und scheint auf veraltete Versionen von x86-Prozessoren ausgerichtet zu sein, ohne es anzugeben Wenn ein WORD 2 Byte groß ist, wissen die Leute entweder nicht, wovon Sie sprechen, oder sie wissen, dass Sie auf der Basis von sehr veralteten x86-Prozessoren unterrichtet wurden und wissen, was Sie zu erwarten haben.
Ein Byte ist die Anzahl der Bits, für die sich jemand entschieden hat. Es kann sich um 8 Bit, 9 Bit oder 16 Bit handeln. Im Jahr 2016 wird ein Byte in den meisten Fällen aus acht Bit bestehen. Aus Sicherheitsgründen können Sie den Begriff Oktett verwenden - ein Oktett besteht immer aus acht Bits.
Die eigentliche Verwirrung besteht darin, zwei Fragen zu verwechseln: 1. Wie viele Bits enthält ein Byte? 2. Wenn ich ein Byte von einem Ort zum anderen übertragen oder ein Byte mit praktischen physikalischen Mitteln speichern wollte, wie würde ich das tun? Die zweite Frage ist normalerweise für Sie von geringem Interesse, es sei denn, Sie arbeiten in einem Unternehmen, das Modems, Festplatten oder SSD-Laufwerke herstellt. In der Praxis interessiert Sie die erste Frage, und für die zweite Frage sagen Sie einfach "gut, jemand kümmert sich darum".
Das erwähnte Paritätsbit ist ein primitiver Mechanismus, mit dem festgestellt werden kann, dass sich der Speicher versehentlich geändert hat, wenn ein Byte im Speicher gespeichert und später gelesen wird. Das ist nicht sehr gut, weil es nicht feststellt, dass zwei Bits geändert wurden, sodass eine Änderung wahrscheinlich unentdeckt bleibt, und sich nicht von dem Problem erholen kann, da es keine Möglichkeit gibt, herauszufinden, welche der 8 Bits geändert wurden , oder auch wenn sich das Paritätsbit geändert hat.
Paritätsbits werden in dieser primitiven Form praktisch nicht verwendet. Daten, die dauerhaft gespeichert werden, werden normalerweise auf kompliziertere Weise geschützt, z. B. durch Hinzufügen einer 32-Bit-Prüfsumme oder einer längeren Prüfsumme zu einem Block von 1024 Byte - was viel weniger zusätzlichen Speicherplatz beansprucht (0,4% in diesem Beispiel anstelle von 12,5%) und erheblich ist weniger wahrscheinlich nicht herauszufinden, wenn etwas nicht stimmt.
quelle
WORD
s spricht , was ... Ihren Standpunkt irgendwie beweist, da viele der WinAPI-Typnamen veraltet sind, aber aus Gründen der Abwärtskompatibilität beibehalten werden. xPTrotz der wirklich hervorragenden Antworten, die hier gegeben wurden, bin ich überrascht, dass niemand darauf hingewiesen hat, dass Paritätsbits oder Fehlerkorrekturbits per Definition "Metadaten" sind und daher nicht Teil des Bytes selbst.
Ein Byte hat 8 Bits !
quelle
Im modernen Sprachgebrauch besteht ein Byte aus 8 Bits, Punkt (obwohl es historisch andere Definitionen hatte). Andererseits ist ein Datenwort das, was die betreffende Hardware als atomare Einheit behandelt - es könnte 8 Bits, 9 Bits, 10 Bits, 12 Bits, 16 Bits, 20 Bits, 24 Bits, 32 Bits usw. sein. Verschiedene Computer Systeme hatten im Laufe der Jahre alle möglichen unterschiedlichen Wortgrößen.
Um ein Speichersystem oder ein Übertragungsprotokoll zu implementieren, ist es vorteilhaft, eine Fehlererkennung / -korrektur hinzuzufügen, die zusätzliche Bits beinhaltet. Sie ergeben kein 9-Bit-Byte, da ein Byte, wie oben angegeben, aus 8 Bits besteht.
Verschiedene Schemata ergänzen die Fehlererkennung und / oder -korrektur auf verschiedene Arten.
Die typische Verwendung der Parität besteht darin, dem Übertragungswort ein zusätzliches Bit hinzuzufügen, damit der Empfänger ein einzelnes Fehlerbit erkennen kann.
Ein Schema, das eine Einzelbit-Fehlerkorrektur bereitstellen kann, beinhaltet das Hinzufügen von 4 ECC-Bits pro 32-Bit-Datenwort. Dies entspricht zwar arithmetisch 1 Bit pro Byte, funktioniert aber so nicht. Ein 36-Bit-Datenwort kann genug Informationen enthalten, um einen Einzelbitfehler für einen 32-Bit-Datenraum zu beheben.
quelle
8 Bits. In der CPU und der Tastatur sind es 9 und 11 Bit. Benutzerdaten werden jedoch in 8 Bits dargestellt. Tasten auf der Tastatur senden Sings, die in 11 Bits unterteilt sind. 1 Startbit, 1 Endbit, 1 Paritätsbit und 8 Bits, die eine gedrückte Taste darstellen.
quelle