86 votes

Système où 1 octet ! = 8 bits ?

Tout le temps j’ai de phrases comme lu

ne vous fiez pas sur 1 octet, soit 8 bits en taille

Utilisez `` au lieu de 8 comme une constante pour convertir entre les bits et les octets

et ainsi de suite. Quels systèmes de la vie réelle sont là aujourd'hui, où cela est vrai ? (Je ne sais pas s’il y a des différences entre C et C++ à cet égard, ou si il s’agit en fait de langue agnostique. S’il vous plaît modifier le balisage si nécessaire.)

68voto

Jerry Coffin Points 237758

Sur les machines plus anciennes, des codes de taille inférieure à 8 bits étaient assez commun, mais la plupart de ceux qui ont été morts et disparus depuis des années maintenant.

Le C et le C++ ont mandaté un minimum de 8 bits pour char, au moins aussi loin que la norme C89. [Edit: Par exemple, C90, §5.2.4.2.1 exige CHAR_BIT >= 8 et UCHAR_MAX >= 255. C89 utilise un autre numéro de la section (je crois que ce serait §2.2.4.2.1) mais contenu identique]. Ils traitent de "char" et "octet" essentiellement comme des synonymes [Modifier: par exemple, CHAR_BIT est décrit comme: "nombre de bits pour le plus petit objet, qui n'est pas un champ de bits (octet)".]

Il ya, cependant, les machines actuelles (principalement Dsp) où le plus petit type est plus grand que 8 bits -- un minimum de 12, 14 ou même 16 bits est assez commun. Windows CE n'est à peu près la même: son petit (au moins avec le compilateur de Microsoft) est de 16 bits. Ils ne sont pas, cependant, traiter un char 16 bits -- au lieu de cela, ils prennent les (non conforme) approche de simplement ne pas soutenir un type nommé char .

23voto

John R. Strohm Points 5338

Aujourd'HUI, dans le monde du C++ sur des processeurs x86, il est assez sûr de compter sur un octet de 8 bits. Processeurs où la taille de mot n'est pas une puissance de 2 (8, 16, 32, 64) sont très rares.

IL N'ÉTAIT PAS TOUJOURS LE CAS.

Les Données de Contrôle de 6600 (et ses frères) Processeur Central utilisé un 60-peu de mots, et ne pouvait adresser un mot à la fois. En un sens, un "octet" sur CDC 6600 était de 60 bits.

Le DEC-10 octets pointeur matériel travaillé avec l'arbitraire, taille octets. L'octet pointeur inclus la taille en octets, en bits. Je ne me souviens pas si les octets pourrait s'étendre les limites de mot; je pense qu'ils n'auraient pas, ce qui signifie que vous aurez un peu de déchets de bits par mot si la taille en octets est pas 3, 4, 9 ou 18 bits. (DEC-10 utilisé un 36 bits mot.)

14voto

R.. Points 93718

Sauf si vous écrivez du code qui pourrait être utile sur un DSP, vous êtes tout à fait en droit de supposer octets de 8 bits. Tout le monde ne peut pas être un VAX (ou un processeur Intel), mais tout le monde a à communiquer, partager des données, d'établir des protocoles communs, et ainsi de suite. Nous vivons dans l'ère de l'internet, construits sur des protocoles construits sur des octets, et une C de mise en œuvre où les octets ne sont pas des octets va avoir du fil à retordre à l'aide de ces protocoles.

Il est également intéressant de noter que la norme POSIX et Windows (et mandat) octets de 8 bits. Qui couvre 100% de intéressant de non-incorporé des machines, et ces jours-ci une grande partie de la non-DSP systèmes embarqués.

7voto

Daniel A. White Points 91889

De Wikipedia:

De la taille d'un octet était lors de la première sélectionné pour être un multiple de l'existant téléimprimeur codes, en particulier la 6-bit codes utilisés par l'Armée AMÉRICAINE (Fieldata) et de la Marine. En 1963, à la fin de l'utilisation de l'incompatibilité de téléscripteur codes par différentes branches de la Gouvernement des états-UNIS, ASCII, 7 bits de code, a été adopté comme l'Information du gouvernement Fédéral Norme de traitement, de prise de 6 bits octets commercialement obsolète. Dans le au début des années 1960, AT&T introduit numérique la téléphonie dans un premier temps sur la distance du tronc les lignes. Ces 8 bits µ-law l'encodage. Ce grand investissement promis de réduire les coûts de transmission pour 8 bits de données. L'utilisation de codes à 8 bits pour la téléphonie numérique a également causé 8 bits de données "octets" pour être adopté la base de données de l'unité du début Internet.

6voto

Alexander Gessler Points 26717

Comme un programmeur moyen sur les plates-formes grand public, vous faites pas besoin de s’inquiéter trop beaucoup environ un octet de 8 bits ne sont ne pas. Cependant, je voudrais encore utiliser la constante dans mon code et (ou mieux `` ) tous les emplacements où vous compter sur 8 octets. Qui devrait vous mettre sur le côté sécuritaire.

(Je ne suis pas au courant de n’importe quelle plateforme pertinent où il n’est pas vrai).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X