Question Si les machines 32 bits ne peuvent traiter que des nombres allant jusqu’à 2 ^ 32, pourquoi puis-je écrire 1000000000000 (milliards) sans que ma machine ne plante?


Les ordinateurs 32 bits ne peuvent stocker que des entiers signés jusqu'à 231 - 1.
C'est pourquoi nous sommes à court d'adresses IPv4 et sommes entrés dans l'ère 64 bits.

Cependant, le numéro 231 - 1 (2 147 483 647) n'est pas aussi grand que le nombre de 1 000 milliards (1 000 000 000 000) que je semble pouvoir afficher correctement sans que ma machine ne s'écrase.

Est-ce que quelqu'un peut expliquer pourquoi c'est?


365


origine


La question est imparfaite. Les machines 32 bits peuvent gérer des nombres beaucoup plus grands que 2 ^ 32. Ils le font tout le temps, avec «long» et ainsi de suite. Ils ne peuvent stocker que 2 ^ 32 dans un seul registre, mais le logiciel est écrit pour contourner ce problème. Certaines langues modernes n'ont même pas de problème avec la longueur d'un nombre donné. - JFA
Veuillez garder les commentaires sur le sujet, polis et pertinents pour les aspects techniques de la question. Près de 50 commentaires de blagues ont déjà dû être supprimés, et nous aimerions éviter de devoir verrouiller le message. Je vous remercie. - nhinkle♦
Cette question a été écrite d'une manière un peu négligée. Que voulez-vous dire par "écrire" et "afficher" le numéro 1000000000000? Lorsque vous avez écrit la question, vous avez écrit le numéro 1000000000000, et votre navigateur Web l'affiche très bien, je suppose, mais cela ne devrait pas être étrange pour quiconque a déjà utilisé un ordinateur auparavant. La question demande une interprétation gratuite. - HelloGoodbye
On estime que la conscience humaine contient environ 50 bits (je lis quelque part). Donc, la question n'est pas "Comment puis-je écrire 10^9 sans que mon PC tombe en panne? "mais plutôt" Comment puis-je écrire 10^(18) sans que mon cerveau s'écrase? " - Hagen von Eitzen
Les ordinateurs 32 bits ne peuvent stocker que des entiers non signés jusqu'à 2 ^ 32 - 1. 2 ^ 32 - 1 n'est même pas égal à 2 147 483 647 ... 300 votes croissants et personne ne s'en est rendu compte? - Koray Tugay


Réponses:


Je réponds à votre question en vous en posant une autre:

Comment comptez-vous sur vos doigts à 6?

Vous comptez probablement jusqu'au plus grand nombre possible avec une main, puis vous passez à la deuxième main lorsque vous n'avez plus de doigts. Les ordinateurs font la même chose, s'ils doivent représenter une valeur supérieure à celle d'un seul registre, ils utiliseront plusieurs blocs de 32 bits pour travailler avec les données.


785



C'est drôle, @codename. Comment comptez-vous alors sur vos doigts à 32 ou plus (c.-à-d. Une fois que 2 ^ 5 est épuisé)? ;) L 'analogie avec le passage à une autre main est bonne ... même si le binaire retarde le besoin de passer à une autre main. Ce que j'aimerais voir compte sur 1 024 ou plus avec la dextérité de la pédale pour se déplacer sur ses orteils pour un décompte supplémentaire en binaire - jusqu'à 1 048 575! :) C'est potentiellement 20 bits de puissance de la carte fille. : P - J0e3gan
Veuillez garder les commentaires sur le sujet et pertinents pour discuter des aspects techniques de cette réponse. Plus de 60 commentaires de blague ont déjà été supprimés de cette réponse, et nous aimerions éviter de verrouiller le message. - nhinkle♦
@ nom-code-facile, vous attribuez un doigt comme un pointeur de pile. Une fois que vous n'avez plus de doigts, vous ajoutez le montant à la pile et recommencez le comptage. - Makach
Où avez-vous appris cela, @codename? J'ai entendu ceci de la part de Frederik Pohl, voir par exemple ici hjkeen.net/halqn/f_pohl3.htm - Zane
Je pense que ce n'est pas la réponse à la question pertinente. Réponse @ Bigbio2002 est la bonne. Ici "1000000000000" n'est pas un nombre mais un texte, tout comme "adsfjhekgnoregrebgoregnkevnregj". Ce que vous dites est vrai, mais je pense fermement que ce n’est pas la bonne réponse. Et de voir tant de commentaires… - Master Chief


Vous avez raison de dire qu'un entier 32 bits ne peut pas contenir une valeur supérieure à 2 ^ 32-1. Toutefois, la valeur de cet entier 32 bits et son affichage à l’écran sont deux choses complètement différentes. La chaîne imprimée "1000000000000" n'est pas représentée par un entier de 32 bits en mémoire.

Pour afficher littéralement le nombre "1000000000000" nécessite 13 octets de mémoire. Chaque octet individuel peut contenir une valeur allant jusqu'à 255. Aucun d'eux ne peut contenir la valeur numérique complète, mais interprété individuellement comme des caractères ASCII (par exemple, le caractère '0'est représenté par la valeur décimale 48, valeur binaire 00110000), ils peuvent être assemblés dans un format qui a du sens pour vous, un humain.


Un concept connexe en programmation est typage, qui est comment un ordinateur va interpréter un flux particulier de 0le sable 1s. Comme dans l'exemple ci-dessus, il peut être interprété comme une valeur numérique, un caractère ou même autre chose. Bien qu'un nombre entier de 32 bits ne puisse pas contenir une valeur de 1000000000000, un nombre à virgule flottante de 32 bits pourra être utilisé, en utilisant une interprétation entièrement différente.

En ce qui concerne la manière dont les ordinateurs peuvent travailler et traiter de gros nombres en interne, il existe des entiers de 64 bits (pouvant prendre en charge des valeurs allant jusqu'à 16 milliards de milliards), des valeurs à virgule flottante, ainsi que des bibliothèques spécialisées Nombres.


397



En fait, c'est la plupart du temps correct mais pas tout à fait. Il est peu probable qu'un nombre à virgule flottante de 32 points puisse représenter avec précision 1000000000000. Il représentera un nombre très très proche du nombre souhaité, mais pas exactement celui-ci. - Tim B
@ TimB: Avez-vous entendu parler du format decimal32? Cela fait partie de la norme IEEE 754-2008. Ce format est capable de représenter correctement ce nombre :) - V-X
C'est vrai, ça peut. Cependant, ce n'est pas le format que les gens entendent par "float", qui désigne généralement un nombre à virgule flottante de 32 bits stocké et utilisé par les processeurs à virgule flottante standard des ordinateurs actuels. - Tim B
@TimB en effet. Le nombre le plus proche de celui qui peut être représenté par un float32 est 999999995904 - greggo
@TimB: Mais un nombre à virgule flottante de 64 bits peut facilement représenter 1000000000000 exactement. C'est 10 ^ 12 ou 2 ^ 12 * 5 ^ 12; 5 ^ 12 nécessite 28 bits de mantisse. - Keith Thompson


En premier lieu, les ordinateurs 32 bits peuvent stocker des numéros allant jusqu’à 2³²-1. dans un seul mot machine. Mot machine est la quantité de données que le processeur peut traiter de manière naturelle (c'est-à-dire que les opérations sur les données de cette taille sont implémentées dans le matériel et sont généralement les plus rapides à exécuter). Les CPU 32 bits utilisent des mots composés de 32 bits et peuvent donc stocker des nombres de 0 à 2³²-1 en un mot.

Seconde, 1 trillion et 1000000000000 sont deux choses différentes.

  • 1 billion est un concept abstrait de nombre
  • 1000000000000 est un texte

En appuyant 1 une fois puis 0 12 fois vous tapez du texte. 1 contributions 1, 0 contributions 0. Voir? Vous tapez des caractères. Les caractères ne sont pas des nombres. Les machines à écrire n'avaient ni processeur ni mémoire du tout et elles traitaient plutôt bien ces "nombres", car ce n'est que du texte.

La preuve que 1000000000000 n'est pas un nombre, mais du texte: cela peut signifier 1 billion (en décimal), 4096 (en binaire) ou 281474976710656 (en hexadécimal). Il a encore plus de significations dans différents systèmes. Sens de 1000000000000 est un nombre et le stocker est une histoire différente (nous y reviendrons dans un instant).

Pour stocker le texte (dans la programmation il s'appelle chaîne) 1000000000000 vous avez besoin de 14 octets (un pour chaque caractère plus un octet de fin NULL qui signifie essentiellement "la chaîne se termine ici"). C'est 4 mots machine. 3 et demi serait suffisant, mais comme je l'ai dit, les opérations sur les mots de la machine sont les plus rapides. Assumons ASCII est utilisé pour le stockage de texte, donc en mémoire, il ressemblera à ceci: (conversion des codes ASCII correspondant à 0 et 1 à binaire, chaque mot dans une ligne distincte)

00110001 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00000000 00000000 00000000

Quatre caractères correspondent à un mot, le reste est déplacé vers le suivant. Le reste est déplacé au mot suivant jusqu'à ce que tout (y compris le premier octet NULL) corresponde.

Maintenant, revenons au stockage des chiffres. Cela fonctionne comme avec le texte débordant, mais ils sont ajustés de droite à gauche. Cela peut paraître compliqué, alors voici un exemple. Par souci de simplicité, supposons que:

  • notre ordinateur imaginaire utilise le décimal au lieu du binaire
  • un octet peut contenir des nombres 0..9
  • un mot se compose de deux octets

Voici une mémoire vide de 2 mots:

0 0
0 0

Stockons le numéro 4:

0 4
0 0

Maintenant, ajoutons 9:

1 3
0 0

Notez que les deux opérandes pourraient tenir dans un octet, mais pas le résultat. Mais nous en avons un autre prêt à utiliser. Maintenant, stockons 99:

9 9
0 0

Encore une fois, nous avons utilisé le deuxième octet pour stocker le numéro. Ajoutons 1:

0 0
0 0

Whoops ... C'est ce qu'on appelle débordement d'entier et est une cause de nombreux problèmes graves, parfois très chers.

Mais si nous nous attendons à un débordement, nous pouvons le faire:

0 0
9 9

Et maintenant, ajoutez 1:

0 1
0 0

Cela devient plus clair si vous supprimez les espaces séparant les octets et les nouvelles lignes:

0099    | +1
0100

Nous avons prédit que le débordement pourrait se produire et nous pourrions avoir besoin de mémoire supplémentaire. Manipuler les nombres de cette façon n'est pas aussi rapide qu'avec des nombres qui correspondent à des mots simples et doit être implémenté dans un logiciel. L'ajout de la prise en charge de deux nombres de mots de 32 bits à un processeur 32 bits en fait un processeur 64 bits (maintenant, il peut fonctionner sur des nombres 64 bits en mode natif, non?).

Tout ce que j'ai décrit ci-dessus s'applique à la mémoire binaire avec des octets de 8 bits et aux mots de 4 octets également, cela fonctionne à peu près de la même manière:

00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111    | +1
00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000

La conversion de ces nombres en système décimal est cependant délicate. (mais ça fonctionne assez bien avec hexadécimal)


189



Votre réponse se lit plutôt avec condescendance. OP parle clairement du nombre, pas du texte: large as the number 1 trillion (1000000000000). Aussi, vous parlez presque de Arithmétique de précision arbitraire, mais vous ne mentionnez jamais vraiment les termes de ce que vous dites ... - MirroredFate
"1 billion" est aussi une chaîne - Elzo Valugi
@ ElzoValugi C'est. Je devais trouver un moyen de présenter le concept de nombre abstrait, par opposition à la chaîne représentant un nombre. Je crois que "1 billion" est une manière de faire mieux et moins ambiguë (voir la preuve dans la réponse). - gronostaj
@MirroredFate Je ne suis pas d'accord avec 'parle clairement du nombre'. OP dit «affiché bien», ce qui clairement est parler du texte "1000000000000" à moi ... - Joe
@annannbane 'A' est un personnage et non un nombre. '?' est un personnage et non un nombre. «1» est un caractère et non un nombre aussi. Les caractères ne sont que des symboles. Ils peuvent représenter des chiffres ou des chiffres, mais ce ne sont pas des chiffres. «1» peut représenter un, dix, cent, etc., c'est juste un symbole représentant un chiffre qui peut être un nombre ou une partie. «10» (chaîne de caractères) peut signifier deux ou huit ou dix ou seize, etc. mais quand vous dites que vous avez dix pommes, vous utilisez un numéro dix et tout le monde sait ce que vous voulez dire. Il y a une énorme différence entre les personnages et les nombres. - gronostaj


Vous pouvez aussi écrire "CETTE DÉCLARATION EST FAUX" sans votre ordinateur en panne :) @ La réponse de Scott est parfaite pour certains cadres de calcul, mais votre question "d'écrire" un grand nombre implique qu'il ne s'agit que de texte, du moins jusqu'à ce qu'il soit interprété.

Modifier: maintenant avec moins de sarcasme des informations plus utiles sur les différentes manières a nombre peut être stocké en mémoire. Je vais les décrire avec abstraction supérieure c'est-à-dire qu'un programmeur moderne peut écrire du code avant qu'il ne soit traduit en code machine pour exécution.

Les données sur un ordinateur doivent être limitées à un certain type, et une définition informatique de ce type décrit quelles opérations peuvent être effectuées sur ces données et comment (c'est-à-dire comparer des nombres, concaténer du texte ou XOR un booléen). Vous ne pouvez pas simplement ajouter du texte à un nombre, tout comme vous ne pouvez pas multiplier un nombre par un texte afin que certaines de ces valeurs puissent être converties entre les types.

Commençons avec entiers non signés. Dans ces types de valeur, tous les bits sont utilisés pour stocker des informations sur les chiffres; le vôtre est un exemple de Entier non signé de 32 bits où toute valeur de 0 à 2^32-1 peut être stocké Et oui, selon la langue ou l'architecture de la plate-forme utilisée, vous pourriez avoir des entiers de 16 bits ou des entiers de 256 bits.

Et si vous voulez être négatif? Intuitivement, entiers signés est le nom du jeu. Convention est d'allouer toutes les valeurs de -2^(n-1) à 2^(n-1)-1 - De cette façon, nous évitons la confusion d'avoir à gérer deux manières d'écrire +0 et -0. Donc, un entier signé 32 bits contiendrait une valeur de -2147483648 à 2147483647. Neat, n'est-ce pas?

Ok, nous avons couvert des entiers qui sont des nombres sans composante décimale. Leur expression est plus délicate: la partie non entière ne peut se situer qu'entre 0 et 1, donc chaque bit supplémentaire utilisé pour le décrire augmenterait sa précision: 1/2, 1/4, 1/8 ... Le problème est que vous ne pouvez pas exprimer avec précision une simple décimale 0.1 comme une somme de fractions qui ne peuvent avoir que deux puissances au dénominateur! Ne serait-il pas beaucoup plus facile de stocker le nombre sous forme d'entier, mais acceptez plutôt de placer le point de la base (décimal) à la place? C'est appelé un point fixe chiffres, où nous stockons 1234100 mais convenir d'une convention pour le lire comme 1234.100 au lieu.

Un type relativement plus commun utilisé pour les calculs est floating point. La façon dont cela fonctionne est très bien, il utilise un bit pour stocker la valeur du signe, puis certains pour stocker l'exposant et le significande. Il existe des normes qui définissent ces allocations, mais pour un Flotteur 32 bits le nombre maximum que vous pourriez stocker est écrasant

(2 - 2^-23) * 2^(2^7 - 1) ≈ 3.4 * 10^38

Cela se fait toutefois au prix de la précision. JavaScript disponible dans les navigateurs utilise des flottants 64 bits, et il ne peut toujours pas faire les choses correctement. Copiez simplement ceci dans la barre d'adresse et appuyez sur entrée. Alerte spoiler: le résultat est ne pas va être 0.3.

javascript:alert(0.1+0.2);

Il y a plus de types alternatifs comme Microsoft .NET 4.5 BigInteger, qui n’a théoriquement pas de limite supérieure ou inférieure et doit être calculé en "lots"; mais peut-être les technologies les plus fascinantes sont celles qui comprendre mathématiques, comme le moteur Wolfram Mathematica, qui peuvent travailler avec des valeurs abstraites comme infini.


40



Vous pouvez le faire en ce réalité. Essayez de faire cela dans l'univers Star Trek. Restez juste en arrière, à cause de toutes les étincelles et de la fumée. - Michael Petrotta
Ce n'est pas exactement comment fonctionne le point fixe. C'est en fait un système où les nombres sont mis à l'échelle et biaisés pour produire le point décimal. Dans votre exemple, l'échelle est de 1/1000, mais il existe également des nombres à virgule fixe (en particulier en infographie): 0 = 0.0, 255 = 1.0 - l'échelle est 1/255. - Andon M. Coleman


La clé est de comprendre comment les ordinateurs encoder Nombres.

Certes, si un ordinateur insiste pour stocker des nombres en utilisant une représentation binaire simple du nombre en utilisant un seul mot (4 octets sur un système 32 bits), un ordinateur 32 bits ne peut stocker que des nombres allant jusqu'à 2 ^ 32. Mais il y a beaucoup d'autres façons d'encoder les nombres en fonction de ce que vous voulez réaliser avec eux.

Un exemple est la façon dont les ordinateurs stockent les nombres à virgule flottante. Les ordinateurs peuvent utiliser toute une série de méthodes pour les encoder. Le standard IEEE 754 définit des règles pour coder des nombres supérieurs à 2 ^ 32. Crudement, les ordinateurs peuvent implémenter ceci en divisant les 32 bits en différentes parties représentant quelques chiffres du nombre et d'autres bits représentant le Taille du nombre (c'est-à-dire l'exposant, 10 ^ x). Cela permet un beaucoup plus grand gamme des nombres en termes de taille, mais compromet la précision (ce qui est OK pour de nombreuses raisons). Bien entendu, l'ordinateur peut également utiliser plus d'un mot pour cet encodage, ce qui augmente la précision de l'ampleur des nombres codés disponibles. La version simple décimale 32 de la norme IEEE permet des nombres avec environ 7 chiffres décimaux de précision et des nombres allant jusqu’à environ 10 ^ 96 degrés.

Mais il y a beaucoup d'autres options si vous avez besoin de précision supplémentaire. De toute évidence, vous pouvez utiliser plus de mots dans votre encodage (mais avec une pénalité de performance pour convertir dans et hors du format codé). Si vous souhaitez explorer une solution, il existe un excellent complément open-source pour Excel qui utilise un schéma de codage permettant des centaines de chiffres de précision dans le calcul. Le complément s'appelle Xnumbers et est disponible ici. Le code est en Visual Basic, ce qui n'est pas le plus rapide possible, mais il a l'avantage d'être facile à comprendre et à modifier. C'est un excellent moyen d'apprendre comment les ordinateurs parviennent à encoder des nombres plus longs. Et vous pouvez jouer avec les résultats dans Excel sans avoir à installer aucun outil de programmation.


31





Tout est dans votre question.

Vous pouvez écrire n'importe quel numéro que vous aimez sur papier. Essayez d'écrire un billion de points sur une feuille de papier blanc. C'est lent et inefficace. C'est pourquoi nous avons un système à 10 chiffres pour représenter ces grands nombres. Nous avons même des noms pour les grands nombres comme "million", "trillion" et plus, donc vous ne dites pas one one one one one one one one one one one... à voix haute.

Les processeurs 32 bits sont conçus pour fonctionner le plus rapidement et le plus efficacement possible avec des blocs de mémoire qui ont exactement 32 chiffres binaires. Mais nous, les gens, utilisons généralement un système numérique à 10 chiffres, et les ordinateurs, étant électroniques, utilisent un système à deux chiffres (binaire). Les nombres 32 et 64 sont juste des puissances de 2. Donc un million et un billion sont des puissances de 10. Il est plus facile pour nous d'opérer avec ces nombres que des multitudes de 65536, par exemple.

Lorsque nous les écrivons sur papier, nous divisons les chiffres en chiffres. Les ordinateurs divisent les nombres en un plus grand nombre de chiffres. Nous pouvons écrire tous les nombres que nous aimons, ainsi que les ordinateurs si nous les concevons.


24





32bit et 64bit font référence aux adresses mémoire. La mémoire de votre ordinateur est comme une boîte postale, chacun a une adresse différente. La CPU (Central Processing Unit) utilise ces adresses pour adresser les emplacements de mémoire sur votre RAM (Random Access Memory). Lorsque le processeur ne pouvait gérer que des adresses 16 bits, vous ne pouviez utiliser que 32 Mo de mémoire vive (ce qui semblait énorme à l’époque). Avec 32 bits, il est passé à 4 + gb (ce qui semblait énorme à l'époque). Maintenant que nous avons des adresses 64 bits, la RAM passe en téraoctets (ce qui semble énorme).
Cependant, le programme est capable d'allouer plusieurs blocs de mémoire pour des choses telles que le stockage de chiffres et de texte, c'est-à-dire le programme et non la taille de chaque adresse. Donc, un programme peut dire au CPU, je vais utiliser 10 blocs de stockage d’adresse, puis stocker un très grand nombre, ou une chaîne de 10 lettres ou autre chose.
Note latérale: les adresses de mémoire sont désignées par des "pointeurs", de sorte que la valeur 32 et 64 bits signifie la taille du pointeur utilisé pour accéder à la mémoire.



15



Bonne réponse, sauf pour les détails - 16 bits d'espace d'adressage vous ont donné 64 Ko, pas 32 Mo, et des machines comme le 286 avaient des adresses 24 bits (pour 16 Mo). De plus, avec les adresses 64 bits, vous allez bien au-delà des téraoctets - plus de 16 exaoctets - les téraoctets représentent le type de limites imposées par les cartes mères / processeurs de la génération actuelle - et non la taille des adresses. - Phil
32 bits fait référence à la taille du mot machine, pas aux adresses mémoire. Comme Phil l'a mentionné, 286 était une CPU 16 bits mais utilisait 24 bits pour l'adressage par segmentation de mémoire. Les processeurs x86 sont 32 bits, mais utilisent l'adressage 36 bits. Voir PAE. - gronostaj
@gronostaj et bien x86 ont un adressage 32 bits du 386 au Pentium. - Ruslan
Upvote parce que c'est la seule réponse correcte ici - 32bit fait référence à l'adressage de mémoire 32bit, et non l'arithmétique 32bit. - user1207217
@ user1207217: ?? Donc, selon votre raisonnement, par exemple Z80 ou 8080 sont des processeurs 16 bits (en raison de l'adressage de mémoire 16 bits et du bus de mémoire)? - pabouk


Parce que l'affichage du nombre se fait en utilisant des caractères individuels, pas des entiers. Chaque chiffre du nombre est représenté par un littéral de caractère distinct, dont la valeur entière est définie par l'encodage utilisé, par exemple 'a' est représenté avec une valeur ascii 97, tandis que '1' est représenté avec 49. Vérifier la table ascii ici.
Pour afficher à la fois 'a' et '1' est identique. Ce sont des littéraux de caractères, pas des entiers. Chaque littéral de caractère est autorisé à avoir une valeur maximale de 255 dans la plate-forme 32 bits stockant la valeur dans une taille de 8 bits ou 1 octet (cela dépend de la plate-forme, mais 8 bits est la taille de caractère la plus commune). affiché La quantité de caractères séparés qu’ils peuvent afficher dépend de la mémoire vive dont vous disposez. Si vous avez juste 1 octet de RAM, vous pouvez afficher un seul caractère, si vous avez 1 Go de RAM, vous pouvez afficher 1024 * 1024 * 1024 caractères (trop paresseux pour faire le calcul).

Cette limitation s'applique cependant aux calculs, mais je suppose que vous êtes intéressé par la norme IPV4. Bien qu'il ne soit pas entièrement lié aux ordinateurs bit-size, il a en quelque sorte affecté les normes. Lors de la création du standard IPV4, ils stockaient les valeurs ip dans des entiers de 32 bits. Maintenant, une fois que vous avez donné la taille, et c'est devenu standard. Tout ce que nous savons sur Internet en dépendait, puis nous avons manqué d'adresses IP à attribuer. Donc, si la norme IP a été révisée pour avoir 64 bits, tout ne fonctionnera plus, y compris votre routeur (je suppose que c'est correct) et d'autres périphériques réseau. Donc, un nouveau standard doit être créé, qui a simplement échangé l'entier 32 bits avec un 128 bits. Et reste ajusté de la norme. Les fabricants de matériel doivent simplement déclarer qu'ils prennent en charge cette nouvelle norme et qu'elle deviendra virale. Bien que ce ne soit pas si simple, mais je suppose que vous avez bien compris.

Avertissement: La plupart des points mentionnés ici sont fidèles à mon hypothèse. J'ai peut-être manqué des points importants pour simplifier les choses. Je ne suis pas bon avec les nombres, donc j'ai dû manquer quelques chiffres, mais mon point ici est de répondre à la réponse de l'OP sur pourquoi il ne va pas planter le PC.


13



Je n'ai pas refusé, mais votre réponse pose un certain nombre de problèmes. 1 est 0x31 en ASCII, pas 0x1. 1 Go = 1024 ^ 3 B. Le protocole IPv4 inventé avant l'introduction des processeurs 32 bits, ce qui signifie que les adresses stockées dans des nombres entiers de 32 bits sont en conflit avec la question des OP. Et enfin, IPv6 utilise des adresses 128 bits, pas 64 bits. - gronostaj


Dans les processeurs, il y a des "mots". Il y a des mots différents. Lorsque les gens disent "processeur 32 bits", ils signifient surtout "largeur du bus mémoire". Ce mot est constitué de différents "champs", qui se réfèrent à des sous-systèmes d'ordinateur correspondant à la transmission (24 bits) et au contrôle (autres bits). Je peux me tromper à propos des chiffres exacts, assurez-vous de le savoir dans les manuels.

L'aspect complètement différent est le calcul. Les jeux d'instructions SSE et MMX peuvent stocker des entiers longs. La longueur maximale sans perte de productivité dépend de la version actuelle de SSE, mais elle est toujours de l'ordre de 64 bits.

Les processeurs Opteron actuels peuvent gérer des nombres de 256 bits (je ne suis pas sûr du nombre entier, mais le facteur de flottement est certain).

Résumé: (1) la largeur de bus n'est pas directement connectée à la largeur de calcul, (2) même des mots différents (mot de mémoire, mot de registre, mot de bus, etc.) ne sont pas reliés entre eux; De nombreux processeurs ont même utilisé un mot de 6 bits (mais son historique).


12



Ce n'est pas vrai, le processeur Pentium d'origine avait un bus de données 64 bits pour une bande passante mémoire élevée, même s'il s'agissait d'un processeur 32 bits. Le 8088 était un processeur 16 bits avec un bus de données 8 bits. - doug65536


Le but d'un dispositif informatique est généralement d'accepter, de traiter, de stocker et d'émettre des données. Le matériel sous-jacent est simplement une machine qui aide à exécuter ces quatre fonctions. Il ne peut faire aucun de ceux sans logiciel.

Le logiciel est le code qui indique à la machine comment accepter les données, comment les traiter, comment les stocker et comment les fournir aux autres.

Le matériel sous-jacent aura toujours des limites. Dans le cas d'une machine 32 bits, la plupart des registres traitant les données ne sont que de 32 bits. Cela ne signifie pas, cependant, que la machine ne peut pas gérer les nombres au-delà de 2 ^ 32, cela signifie que si vous souhaitez traiter des nombres plus importants, la machine peut être chargée de plus d'un cycle pour l'accepter, la traiter et la stocker. ou émet-le.

Le logiciel indique à la machine comment gérer les numéros. Si le logiciel est conçu pour traiter de gros nombres, il envoie une série d'instructions au processeur lui indiquant comment gérer les plus grands nombres. Par exemple, votre numéro peut être représenté par deux registres 32 bits. Si vous vouliez ajouter 1 234 à votre numéro, le logiciel demanderait au CPU d’ajouter 1 234 au registre inférieur, puis de vérifier le bit de débordement pour voir si cet ajout était trop grand pour le registre inférieur. Si c'est le cas, cela ajoute 1 au registre supérieur.

De la même manière que les élèves des écoles élémentaires apprennent à ajouter avec carry, le CPU peut être appelé à gérer des nombres plus importants que ceux qu'il peut contenir dans un seul registre. Cela est vrai pour la plupart des opérations mathématiques génériques, pour des nombres de toute taille pratique.


10