Partage de technologie

Le principe de calcul de la plage représentée par les variables de type int

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Comprendre

Insérer la description de l'image ici
Normalement, une variable de type int occupe 4 octets, 1 octet contient 8 bits et chaque bit a deux états : 0 et 1. Par conséquent, la variable de type int peut représenter un total de 2^32 états (c'est-à-dire qu'elle peut représenter 2 ^8 valeur de données).

2. Pourquoi la plage de valeurs d'un entier de type int est généralement de -2147483648 ~ 2147483647

Commence à 07h36
compréhension plus approfondie
        demander: À partir des deux vidéos ci-dessus, nous pouvons savoir que la plage d'entiers positifs pouvant être représentés par le type int est 1 ~ 2 ^ 31 - 1. Si nous analogisons cette logique avec des entiers négatifs, alors la plage d'entiers pouvant être représentée par le type int ne devrait pas être -2^31 + 1 ~ 2^31 -1 ? Puisque la valeur 2^31 ne peut pas être obtenue, pourquoi -2^31 peut-il être obtenu ?
        répondre:En informatique, la représentation entière signée la plus couramment utilisée estreprésentation en complément à deux . Cette méthode résout non seulement le problème de la représentation des nombres positifs et négatifs, mais simplifie également les opérations d'addition et de soustraction binaires. Examinons cette représentation en détail :
        1. Un chiffre positif : La représentation binaire des nombres positifs est la même que celle des nombres non signés. Par exemple, la représentation binaire à 3 chiffres de 3 est 011.
        2. nombre négatif : La représentation des nombres négatifs s'obtient grâce au complément de nombres positifs. Le complément à deux d'un nombre négatif est calculé en inversant la représentation binaire de la valeur absolue du nombre et en ajoutant 1. Par exemple:
① Négation : inversez d'abord la représentation binaire de 3 011 en 100.
② Ajoutez 1 : ajoutez 1 à 100 pour obtenir 101, donc la représentation en complément à deux de -3 est 101.
         Pour une variable entière de 32 bits, son bit le plus élevé (également appelé bit de signe) représente le signe, 0 représente le positif et 1 représente le négatif. Les 31 bits restants sont utilisés pour représenter des valeurs numériques.Revenons ensuite à la question qui vient d'être posée :
        1. Plage positive (y compris 0) : Le bit de signe est 0 et les 31 bits restants peuvent représenter des valeurs de 000…000 (31 0s) à 011…111 (31 1s). La plage décimale correspondante va de 0 à 2 ^ 31 - 1.
        2. Plage négative : Le bit de signe est 1 et les 31 bits restants peuvent représenter des valeurs de 100...000 (31 0s) à 111...111 (31 1s). Parmi eux, le nombre complémentaire à deux de 100... 000 (31 zéros) représente -2^31, et la valeur décimale correspondante est -2^31. Le nombre complémentaire à deux de 111...111 (31 uns) représente -1 et la valeur décimale correspondante est -1.
         Plage de nombres positifs : 1 ~ 2^31 - 1 ; 0 ; plage de nombres négatifs : -1 ~ -2^31, le nombre total est toujours de 2^32 états différents. Par conséquent, la plage de valeurs d'un entier de type int est généralement de -2147483648 ~ 2147483647 (c'est-à-dire -2^31 ~ 2^31 - 1)

3. Combien d'octets le type int occupe-t-il ?

Combien d'octets un int 64 bits occupe-t-il ? La différence entre les types entiers int, long et long long
Combien d'octets un int 64 bits occupe-t-il ? [Interview] Combien d'octets un int occupe-t-il ?
La différence entre les machines 32 bits et 64 bits et le nombre d'octets occupés par les types de données de base
Type entier en langage C (y compris la plage de valeurs et la longueur)
Combien d’octets le type int occupe-t-il ?
Taille des données de type int et type de pointeur sous différentes plates-formes
Problème Java sizeof()
Les variables de type Int en Python peuvent stocker des entiers de n'importe quelle taille

Résumer:

  1. La taille du type de données en C et C++ est affectée par la norme de compilation, le compilateur, le nombre de bits du système d'exploitation, etc.
  2. La taille du type de données de Java et Python est déterminée par la spécification du langage ou l'implémentation de l'interpréteur et n'est pas affectée par des facteurs tels que le nombre de bits du compilateur et du système d'exploitation.
  3. La principale raison de cette différence de conception est que C et C++ sont des langages de programmation système qui doivent généralement interagir directement avec le matériel, de sorte que la taille des types de données varie en fonction de l'environnement sous-jacent, tandis que Java et Python sont élevés ; langages de programmation de niveau supérieur avec un niveau d'abstraction plus élevé. L'objectif de conception est la cohérence multiplateforme.

4. Recommander

Recommandé à nouveau
Troisième partie : l’origine du problème