Przeczytałem w tym instruktażowym samouczku programowania, że 8 bitów służy do danych, a 1 bit do parzystości, który jest następnie wykorzystywany do wykrywania błędu parzystości (spowodowanego przez awarię sprzętu lub zakłócenia elektryczne).
Czy to prawda?
Odpowiedzi:
Bajt danych to osiem bitów, może być więcej bitów na bajt danych, które są używane w systemie operacyjnym lub nawet na poziomie sprzętowym do sprawdzania błędów (bit parzystości lub nawet bardziej zaawansowany schemat wykrywania błędów), ale dane to osiem bity i każdy bit parzystości jest zwykle niewidoczny dla oprogramowania. Bajt został znormalizowany, aby oznaczać „osiem bitów danych”. Tekst nie jest błędny, mówiąc, że może być więcej bitów przeznaczonych do przechowywania bajtu danych niż osiem bitów danych, ale zwykle nie są one uważane za część bajtu per se, sam tekst wskazuje na ten fakt.
Możesz to zobaczyć w poniższej sekcji samouczka:
4 * 8 = 32, w rzeczywistości może zająć 36 bitów w systemie, ale dla twoich celów i celów jest to tylko 32 bity.
źródło
char
w C (o to chodzi w odnośniku) jest dokładnie najmniejsza adresowalna jednostka pamięci. To się nazywa po prostu char , ale Standard C czyni go synonimem bajtu .Tradycyjnie bajt może mieć dowolny rozmiar i jest po prostu najmniejszą adresowalną jednostką pamięci. Obecnie 8-bitowe bajty zostały w zasadzie ujednolicone dla oprogramowania. Jak powiedział JustAnotherSoul, sprzęt może przechowywać więcej bitów niż 8 bitów danych.
Jeśli pracujesz na programowalnych urządzeniach logicznych, takich jak FPGA, możesz zauważyć, że ich pamięć wewnętrzna jest często adresowalna jako 9-bitowe porcje, a jako autor HDL możesz użyć tego 9-bitowego do sprawdzenia błędów lub po prostu do przechowywania większych ilości danych na „bajt”. Kupując układy pamięci na niestandardowy sprzęt, zazwyczaj masz do wyboru 8 lub 9 bitowych jednostek adresowalnych (lub 16/18, 32/36 itd.), A następnie od Ciebie zależy, czy masz 9-bitowe „bajty” i co robisz to z 9. bitem, jeśli zdecydujesz się go mieć.
źródło
Ten tekst jest wyjątkowo źle sformułowany. Prawie na pewno mówi o pamięci RAM ECC (korekty błędów) .
Ram ECC zwykle przechowuje informacje o wartości 8 bitów przy użyciu 9 bitów. Dodatkowy bit na bajt służy do przechowywania kodów korekcji błędów.
(W obu przypadkach każdy bajt jest rozłożony na każdy układ. Zdjęcie dzięki uprzejmości Puget Systems )
To wszystko jest całkowicie niewidoczne dla użytkowników sprzętu. W obu przypadkach oprogramowanie korzystające z tej pamięci RAM widzi 8 bitów na bajt.
Nawiasem mówiąc: kody korygujące błędy w pamięci RAM zwykle nie są w rzeczywistości 1 bitem na bajt; zamiast tego mają 8 bitów na 8 bajtów. Ma to taki sam narzut przestrzeni, ale ma pewne dodatkowe zalety. Zobacz SECDED, aby uzyskać więcej informacji.
źródło
Ogólnie rzecz biorąc, krótką odpowiedzią jest to, że bajt ma 8 bitów. Upraszcza to sprawę (czasami nawet do niedokładności), ale jest to definicja, którą zna większość ludzi (w tym duża liczba programistów), i definicja, którą prawie wszyscy domyślnie używają (bez względu na to, ile bajtów o różnej wielkości są „ musiałem pracować).
Mówiąc dokładniej, bajt jest najmniejszą adresowalną jednostką pamięci dla danej architektury i jest na ogół wystarczająco duży, aby pomieścić pojedynczy znak tekstowy. W większości nowoczesnych architektur bajt jest definiowany jako 8 bitów; ISO / IEC 80000-13 określa również, że bajt ma 8 bitów, podobnie jak popularny konsensus (co oznacza, że jeśli mówimy o, powiedzmy, 9-bitowych bajtach, napotkasz wiele problemów, chyba że wyraźnie stwierdzam, że nie masz na myśli normalnych bajtów).
Istnieją jednak wyjątki od tej reguły. Na przykład:
sizeof(char)
, jednocześnie pośrednio stwierdzając, że achar
musi zawierać minimum 8 bitów, każdy bajt musi mieć unikalny adres i nie może być żadnych spacji między ciągłymi bajtami w pamięci. Ma to na celu uczynienie języków bardziej przenośnymi niż byłyby, gdyby wyraźnie wymagały 8-bitowych bajtów. [Liczba bitów w bajcie jest określona jakoCHAR_BIT
w „limitach” nagłówka biblioteki C (limits.h
w C,climits
w C ++).]Tak więc w większości przypadków bajt będzie generalnie miał 8 bitów. Jeśli nie, to prawdopodobnie 9 bitów i może, ale nie musi, być częścią słowa 36-bitowego.
źródło
Zauważ, że termin bajt nie jest dobrze zdefiniowany bez kontekstu. Jeśli chodzi o architektury komputerowe, możesz założyć, że bajt jest 8-bitowy, przynajmniej w przypadku nowoczesnych architektur. Zostało to w dużej mierze znormalizowane przez języki programowania, takie jak C, które wymagały, aby bajty miały co najmniej 8 bitów, ale nie dawały żadnych gwarancji dla większych bajtów, co czyniło 8 bitów na bajt jedynym bezpiecznym założeniem.
Są komputery z jednostkami adresowalnymi większymi niż 8 bitów (zwykle 16 lub 32), ale te jednostki są zwykle nazywane słowami maszynowymi, a nie bajtami. Na przykład DSP z 32-bitowymi 32-bitowymi słowami RAM będzie reklamowany jako mający 128 KB lub RAM, a nie 32 KB.
Rzeczy nie są tak dobrze zdefiniowane, jeśli chodzi o standardy komunikacji. ASCII jest nadal szeroko stosowany i ma 7-bitowe bajty (które ładnie mieszczą się w 8-bitowych bajtach na komputerach). Nadajniki-odbiorniki UART są nadal produkowane z konfigurowalnym rozmiarem bajtów (zwykle trzeba wybrać co najmniej 6, 7 i 8 bitów na bajt, ale nie jest to niespotykane 5 i 9).
źródło
Bajt jest zwykle definiowany jako najmniejsza indywidualnie adresowalna jednostka pamięci. Może mieć dowolny rozmiar. Istnieją architektury o rozmiarach bajtów od 6 do 9 bitów, może nawet większych. Istnieją również architektury, w których jedyną adresowalną jednostką jest rozmiar magistrali, w takich architekturach możemy albo powiedzieć, że po prostu nie mają bajtu , lub bajt ma taki sam rozmiar jak słowo (w jednym konkretnym przypadku wiem, że być 32-bitowy); tak czy inaczej, zdecydowanie nie jest to 8-bit. Podobnie istnieją architektury adresowalne bitowo, na tych architekturach moglibyśmy ponownie argumentować, że bajty po prostu nie istnieją, lub argumentować, że bajty są 1-bitowe; tak czy inaczej jest sensowną definicją, ale 8-bit jest zdecydowanie błędny.
Na wielu architekturach ogólnego przeznaczenia jeden bajt zawiera 8 bitów. Nie jest to jednak gwarantowane. Im bardziej oddalasz się od głównego nurtu i / lub procesorów ogólnego przeznaczenia, tym bardziej prawdopodobne jest, że napotkasz bajty inne niż 8-bitowe. To idzie tak daleko, że niektóre wysoce przenośne oprogramowanie pozwala nawet konfigurować rozmiar. Na przykład starsze wersje GCC zawierały makro o nazwie
BITS_PER_BYTE
(lub coś w tym rodzaju), które konfigurowało rozmiar bajtu dla konkretnej architektury. Wierzę, że niektóre starsze wersje NetBSD mogłyby zostać uruchomione na architekturze innej niż 8 bitów na bajt.Jeśli naprawdę chcesz podkreślić, że mówisz o dokładnej ilości 8 bitów, a nie o najmniejszej możliwej do adresowania ilości pamięci, jakkolwiek duża, to możesz użyć terminu oktet , który jest używany na przykład w wielu nowszych RfC.
źródło
CHAR_BIT
(znaleziono wlimits.h
), nie jestem świadomyBITS_PER_BYTE
Kiedy zacząłem programować w 1960 roku, mieliśmy 48-bitowe słowa z 6-bitowymi bajtami - wtedy nie nazywali się tak, więc nazywano je znakami. Potem pracowałem na komputerze Golem z 75 bitowymi słowami i 15 bitami. Później 6 bajtów było normą, dopóki IBM nie wyszedł z 360, a obecnie bajt jest zwykle równoważny oktetowi, tj. 8 bitom danych. Niektóre urządzenia miały dodatkowe bity do wykrywania błędów i być może do korekcji błędów, ale nie były one dostępne dla oprogramowania.
źródło
Bajt ma 8 bitów.
W odległej przeszłości istniały różne definicje słowa pamięci i bajtu. Sugestia, że ta dwuznaczność jest powszechna lub powszechna w dzisiejszym życiu, jest fałszywa.
Co najmniej od końca lat siedemdziesiątych bajt ma 8 bitów. Masowa populacja komputerów domowych i PC jednoznacznie wykorzystała bajt jako 8-bitową wartość w swojej dokumentacji, podobnie jak wszystkie arkusze danych i dokumentacja dla stacji dyskietek, dysków twardych oraz PROM / EPROM / EEPROM / Flash EPROM Układy pamięci / SRAM / SDRAM, które przeczytałem w tym okresie. (I osobiście przeczytałem wiele z nich w tym czasie). Ethernet i kilka innych protokołów komunikacyjnych wyróżniają mnie jako niezwykłe w mówieniu o oktetach.
Dwuznaczność terminu bajt sama w sobie jest rzadką i niejasną rzeczą. Bardzo niewiele populacji programistów, inżynierów projektantów, inżynierów testowych, sprzedawców, inżynierów serwisowych lub przeciętnych graczy w ciągu ostatnich 30 lat lub więcej uważałoby, że oznaczałoby to coś innego niż wartość 8-bitowa, gdyby w ogóle rozpoznali to słowo .
Gdy bajt jest obsługiwany przez sprzęt, na przykład gdy jest przechowywany w układach pamięci lub komunikowany przewodowo, sprzęt może dodawać nadmiarowe dane do bajtu. Może to później pomóc w wykrywaniu błędów sprzętowych, aby można było rozpoznać i odrzucić niewiarygodne dane (np. Parzystość, suma kontrolna, CRC). Lub może pozwolić na poprawienie błędów w danych i odzyskanie danych (np. ECC). W obu przypadkach nadmiarowe dane zostaną odrzucone, gdy bajt zostanie pobrany lub odebrany do dalszego przetwarzania. Bajt pozostaje centralną wartością 8-bitową, a nadmiarowe dane pozostają nadmiarowymi danymi.
źródło
Po pierwsze, samouczek, do którego się odwołujesz, wydaje się dość przestarzały i wydaje się, że jest skierowany do przestarzałych wersji procesorów x86, nie podając go, więc wiele rzeczy, które tam czytasz, nie będzie zrozumiały dla innych (na przykład, jeśli twierdzisz, że że WORD ma 2 bajty, ludzie albo nie będą wiedzieli o czym mówisz, albo będą wiedzieli, że zostałeś nauczony w oparciu o bardzo przestarzałe procesory x86 i będą wiedzieli, czego się spodziewać).
Bajt to dowolna liczba bitów, którą ktoś zdecyduje, że powinien być. Może to być 8 bitów, 9 bitów lub 16 bitów, cokolwiek. W 2016 r. W większości przypadków bajt będzie ośmiobitowy. Aby być bezpiecznym, możesz użyć terminu oktet - oktet zawsze ma zawsze osiem bitów.
Prawdziwe zamieszanie tutaj myli dwa pytania: 1. Jaka jest liczba bitów w bajcie? 2. Jeśli chciałbym przenieść jeden bajt z jednego miejsca do drugiego lub jeśli chciałbym zapisać bajt, używając praktycznych środków fizycznych, jak mam to zrobić? Drugie pytanie jest zazwyczaj mało interesujące, chyba że pracujesz w firmie produkującej modemy, dyski twarde lub dyski SSD. W praktyce interesuje Cię pierwsze pytanie, a na drugie mówisz po prostu „no cóż, ktoś się tym zajmuje”.
Wspomniany bit parzystości jest prymitywnym mechanizmem, który pomaga wykryć, że kiedy bajt jest przechowywany w pamięci, a później bajt jest czytany, pamięć zmieniła się przez przypadek. Nie jest w tym zbyt dobry, ponieważ nie stwierdzi, że dwa bity zostały zmienione, więc zmiana prawdopodobnie pozostanie niewykryta i nie będzie w stanie rozwiązać problemu, ponieważ nie ma sposobu, aby dowiedzieć się, który z 8 bitów zmienił się , a nawet jeśli bit parzystości się zmienił.
Bity parzystości praktycznie nie są używane w tej pierwotnej formie. Dane przechowywane na stałe są zwykle chronione w bardziej skomplikowany sposób, na przykład poprzez dodanie 32-bitowej lub dłuższej sumy kontrolnej do bloku 1024 bajtów - co zajmuje znacznie mniej dodatkowej przestrzeni (0,4% w tym przykładzie zamiast 12,5%) i jest dużo rzadziej nie dowie się, kiedy coś jest nie tak.
źródło
WORD
, co… w pewnym sensie dowodzi twojej racji, ponieważ wiele nazw typów WinAPI jest nieaktualnych, ale zachowano je dla zachowania kompatybilności wstecznej. xPMimo podanych tutaj naprawdę doskonałych odpowiedzi jestem zaskoczony, że nikt nie wskazał, że bity parzystości lub bity korekcji błędów są z definicji „metadanymi”, a zatem nie są częścią samego bajtu.
Bajt ma 8 bitów !
źródło
We współczesnym użyciu bajt ma 8 bitów kropka (chociaż historycznie miał inne definicje). Z drugiej strony, słowo danych jest tym, co dany sprzęt obsługuje jako jednostkę atomową - może to być 8 bitów, 9 bitów, 10 bitów, 12 bitów, 16 bitów, 20 bitów, 24 bity, 32 bity itp. Różne komputery systemy na przestrzeni lat miały różne rozmiary słów.
Aby wdrożyć system pamięci lub protokół transmisji, korzystne jest dodanie wykrywania / korekcji błędów, która obejmuje dodatkowe bity. Nie tworzą 9-bitowego bajtu, ponieważ, jak wspomniano powyżej, bajt ma 8 bitów.
Różne schematy dodają wykrywanie błędów i / lub korekcję na różne sposoby.
Typowe zastosowanie parzystości polega na dodaniu dodatkowego bitu do słowa transmisji, aby odbiornik mógł wykryć pojedynczy bit błędu.
Schemat, który może zapewnić jednobitową korekcję błędów, obejmuje dodanie 4 bitów ECC na 32-bitowe słowo danych. Tak się składa, że jest to arytmetycznie równoważny 1 bit na bajt, ale nie może / nie działa w ten sposób. Jedno 36-bitowe słowo danych może przenosić wystarczającą ilość informacji do odzyskania po jednobitowym błędzie dla 32-bitowej przestrzeni danych.
źródło
8 bitów. Wewnątrz procesora i klawiatury jest to 9 i 11 bitów. Dane użytkownika są reprezentowane w 8 bitach. Klawisze na klawiaturze wysyłają śpiew, który jest podzielony na 11 bitów. 1 bit początkowy, 1 bit końcowy, 1 bit parzystości i 8 bitów reprezentujących naciśnięty klawisz.
źródło