Tout d'abord, les ordinateurs 32 bits peuvent stocker des nombres allant jusqu'à 2 32 -1 dans un seul mot machine . Mot de la machine est la quantité de données que le CPU peut traiter de manière naturelle (c'est-à-dire que les opérations sur des données de cette taille sont implémentées dans le matériel et sont généralement les plus rapides à réaliser). Les CPU 32 bits utilisent des mots composés de 32 bits, ils peuvent donc stocker des nombres de 0 à 2. 32 -1 en un mot .
Deuxièmement, 1 trillion y 1000000000000 sont deux choses différentes.
- 1 trillion est un concept abstrait d'un nombre
- 1000000000000 est un texte
En appuyant sur 1 une fois et ensuite 0 12 fois que vous tapez du texte. 1 entrées 1
, 0 entrées 0
. Tu vois ? Tu tapes des caractères. Les caractères ne sont pas des nombres. Les machines à écrire n'avaient ni unité centrale ni mémoire et elles géraient ces "nombres" plutôt bien, car ce n'est que du texte.
Preuve que 1000000000000 n'est pas un numéro, mais du texte : il peut signifier 1 trillion (en décimal), 4096 (en binaire) ou 281474976710656 (en hexadécimal). Il a encore plus de significations dans différents systèmes. Signification de 1000000000000 est un nombre et stocker ce nombre est une autre histoire (nous y reviendrons dans un instant).
Pour stocker le texte (en programmation, on appelle cela un chaîne de caractères ) 1000000000000 vous avez besoin de 14 octets (un pour chaque caractère plus un octet NULL de fin qui signifie essentiellement "la chaîne se termine ici"). Cela représente 4 mots machine. 3 et demi seraient suffisants, mais comme je l'ai dit, les opérations sur les mots machine sont les plus rapides. Supposons que ASCII est utilisé pour l'encodage du texte, donc en mémoire il ressemblera à ceci : (en convertissant les codes ASCII correspondant à 0
y 1
en binaire, chaque mot sur une ligne séparée)
00110001 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00000000 00000000 00000000
Quatre caractères tiennent dans un mot, le reste est déplacé dans le mot suivant. Le reste est déplacé vers le mot suivant jusqu'à ce que tout (y compris le premier octet NULL) tienne.
Maintenant, revenons au stockage des chiffres. Cela fonctionne de la même manière que pour le texte débordant, mais ils sont placés de droite à gauche. Cela peut sembler compliqué, alors voici un exemple. Pour des raisons 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 est constitué de deux octets
Voici un souvenir vide de 2 mots :
0 0
0 0
Stockons le numéro 4 :
0 4
0 0
Maintenant, ajoutons 9 :
1 3
0 0
Remarquez que les deux opérandes tiennent dans un octet, mais pas le résultat. Mais nous en avons un autre prêt à être utilisé. Maintenant, nous allons stocker 99 :
9 9
0 0
Encore une fois, nous avons utilisé le deuxième octet pour stocker le nombre. Ajoutons 1 :
0 0
0 0
Oups... Cela s'appelle dépassement d'un nombre entier et est une cause de nombreux problèmes graves, parfois très chers .
Mais si nous nous attendons à ce qu'un débordement se produise, 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 et les retours à la ligne séparant les octets :
0099 | +1
0100
Nous avons prévu qu'un débordement pourrait se produire et que nous aurions besoin de mémoire supplémentaire. La manipulation des nombres de cette manière n'est pas aussi rapide que celle des nombres qui tiennent dans un seul mot et elle doit être implémentée dans un logiciel. L'ajout de la prise en charge des nombres de deux mots de 32 bits à un processeur de 32 bits en fait un processeur de 64 bits (il peut maintenant fonctionner sur des nombres de 64 bits en mode natif, n'est-ce pas ?)
Tout ce que j'ai décrit ci-dessus s'applique aussi à la mémoire binaire avec des octets de 8 bits et des mots de 4 octets, 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 il fonctionne très bien avec l'hexadécimal )
36 votes
La question est erronée. Les machines 32 bits peuvent gérer des nombres bien plus grands que 2^32. Elles le font tout le temps, avec 'long' et ainsi de suite. Elles ne peuvent stocker que jusqu'à 2^32 dans un registre, mais le logiciel est écrit pour contourner ce problème. Certains langages modernes n'ont même pas de problème avec la longueur d'un nombre donné.
23 votes
Veuillez garder vos 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 poste. Merci.
6 votes
Cette question a été rédigée d'une manière un peu négligée. Que voulez-vous dire par "écrire" et "afficher" le nombre 1000000000000 ? Lorsque vous avez rédigé la question, vous avez écrit le nombre 1000000000000, et votre navigateur Web l'affiche très bien, je suppose, mais cela ne devrait rien avoir d'étrange pour quiconque a déjà utilisé un ordinateur. La question demande une libre interprétation.
0 votes
Certains langages (comme Python) peuvent stocker des nombres vraiment très grands sous la forme d'un tableau de chiffres. Avec cela, peu importe la taille de votre mot ou registre, vous pouvez avoir autant de chiffres que vous pouvez en stocker en mémoire. C'est 10^2^32 pour les machines 32 bits ou 10^2^64 pour les machines 64 bits !
10 votes
On estime que la conscience humaine contient environ 50 bits (j'ai lu quelque part). La question n'est donc pas "Comment puis-je écrire" mais "Comment puis-je écrire".
10^9
sans que mon PC ne tombe en panne", mais plutôt "Comment puis-je écrire10^(18)
sans que mon cerveau ne s'effondre ?"1 votes
Les ordinateurs 32 bits ne peuvent stocker que des entiers UNSIGNED jusqu'à 2^32 - 1. 2^32 - 1 n'est même pas égal à 2 147 483 647... 300 votes positifs et personne ne s'en est rendu compte ?
0 votes
@KorayTugay Ça, ou tous ceux qui s'en sont rendu compte ont aussi réalisé que ce n'est pas particulièrement important pour la question.
0 votes
Aussi, ce n'est pas un trillion, c'est 4 milliards
0 votes
A titre d'information :
10^12
s'appelleTrillion
aux États-Unis, au Canada anglais, en Australie et dans les pays britanniques modernes.Billion
en Europe, plus anciens, britanniques et canadiens français.