web-dev-qa-db-fra.com

valeur maximale de l'entier

En C, le nombre entier (pour la machine 32 bits) est 32 bits et va de -32 768 à + 32 767. En Java, le nombre entier est également de 32 bits, mais va de -2 147 483 648 à + 2 147 483 647.

Je ne comprends pas en quoi la plage est différente en Java, même si le nombre de bits est le même. Quelqu'un peut-il expliquer cela?

259
stackuser

En C, , le langage lui-même ne détermine pas la représentation de certains types de données. Cela peut varier d'une machine à l'autre. Sur les systèmes intégrés, la int peut avoir une largeur de 16 bits, bien qu'elle soit généralement de 32 bits.

La seule condition est que short int <= int <= long int par taille. En outre, il est recommandé que int représente la capacité native du processeur .

Tous les types sont signés. Le modificateur unsigned vous permet d'utiliser le bit le plus élevé dans la valeur (sinon, il est réservé au bit de signe).

Voici un court tableau des valeurs possibles pour les types de données possibles:

          width                     minimum                         maximum
signed    8 bit                        -128                            +127
signed   16 bit                     -32 768                         +32 767
signed   32 bit              -2 147 483 648                  +2 147 483 647
signed   64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807
unsigned  8 bit                           0                            +255
unsigned 16 bit                           0                         +65 535
unsigned 32 bit                           0                  +4 294 967 295
unsigned 64 bit                           0     +18 446 744 073 709 551 615

En Java , le spécification du langage Java détermine la représentation des données. les types.

L'ordre est le suivant: byte 8 bits, short 16 bits, int 32 bits, long 64 bits. Tous ces types sont signés , il n'y a pas de version non signée. Cependant, les manipulations de bits traitent les nombres tels qu'ils étaient non signés (c'est-à-dire qu'ils traitent tous les bits correctement).

Le type de données de caractère char a une largeur de 16 bits, non signé et conserve les caractères utilisant le codage UTF-16 (il est toutefois possible d'attribuer un char un entier 16 bits non signé arbitraire qui représente un point de code de caractère non valide)

          width                     minimum                         maximum

SIGNED
byte:     8 bit                        -128                            +127
short:   16 bit                     -32 768                         +32 767
int:     32 bit              -2 147 483 648                  +2 147 483 647
long:    64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807

UNSIGNED
char     16 bit                           0                         +65 535
351
gaborsch

En C, le nombre entier (pour la machine 32 bits) est 32 bits et va de -32768 à +32767.

Faux. Entier signé 32 bits dans la représentation du complément à 2 a la plage -231 à 231-1 qui est égal à -2 147 483 648 à 2 147 483 647.

70
Kos

Un entier de 32 bits est compris entre -2 147 483 648 et 2 147 483 647. Cependant, le fait que vous soyez sur une machine 32 bits ne signifie pas que votre compilateur C utilise des entiers 32 bits.

18
Ivaylo Strandjev

La définition du langage C spécifie minimum plages pour divers types de données. Pour int, cette plage minimale est comprise entre -32767 et 32767, ce qui signifie qu'un int doit avoir au moins = au moins 16 bits. Une implémentation est libre de fournir un type int plus large avec une plage plus large en conséquence. Par exemple, sur le serveur de développement SLES 10 sur lequel je travaille, la plage est comprise entre -2147483647 et 2137483647.

Il y a encore des systèmes qui utilisent des types 16-bit int (All The World Is NotVAX x86), mais il y en a beaucoup qui utilisent les types int 32 bits, et peut-être quelques-uns qui utilisent 64 bits.

Le langage C a été conçu pour fonctionner sur différentes architectures. Java a été conçu pour s'exécuter sur une machine virtuelle qui masque ces différences architecturales.

13
John Bode

L'affiche a ses types Java mélangés. en Java, son C dans est court: court (16 bits) = -32768 à 32767 int (32 bits) = -2 147 483 648 à 2 147 483 647

http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html

7
Brill Pappin

L'équivalent strict de Java int est long int en C.

Edit: Si int32_t est défini, c'est l'équivalent en termes de précision. long int garantit la précision de Java int, car sa taille garantie est d'au moins 32 bits.

6
UmNyobe

En effet, en C - entier sur une machine 32 bits, cela ne signifie pas que 32 bits sont utilisés pour le stocker, il peut également s'agir de 16 bits. Cela dépend de la machine (dépendant de l'implémentation).

6
BlueLettuce16

En fait, la taille en bits de int, short, long dépend de l'implémentation du compilateur.

Par exemple. sur mon Ubuntu 64 bits, j'ai short dans 32 bits, alors que sur une autre version Ubuntu 32 bits, il s'agit de 16 bit.

4
Alex

La plage en C pour __int32 est comprise entre –2147483648 et 2147483647. Voir ici pour les plages complètes.

unsigned short 0 to 65535
signed short –32768 to 32767
unsigned long 0 to 4294967295
signed long –2147483648 to 2147483647

Il n'y a aucune garantie qu'un "int" soit 32 bits. Si vous souhaitez utiliser des variables d'une taille spécifique, en particulier lors de l'écriture de code impliquant des manipulations de bits, vous devez utiliser les "types d'entiers standard".

En java

Le type de données int est un entier complémentaire du complément à deux signé de 32 bits. Il a une valeur minimale de -2 147 483 648 et une valeur maximale de 2 147 483 647 (inclus).

1
Achintya Jha

C’est vraiment très simple à comprendre, vous pouvez même le calculer avec la calculatrice Google: vous avez 32 bits pour un int et les ordinateurs sont binaires, donc vous pouvez avoir 2 valeurs par bit (spot). si vous calculez 2 ^ 32, vous obtiendrez le 4 294 967 296. Donc, si vous divisez ce nombre par 2 (car la moitié d'entre eux sont des entiers négatifs et l'autre moitié sont positifs), vous obtenez alors 2 147 483 648. et ce nombre est le plus grand int pouvant être représenté par 32 bits, bien que si vous y prêtez attention, vous remarquerez que 2 147 483 648 est supérieur à 2 147 483 647 par 1, car l'un des nombres représente 0, qui se trouve malheureusement au centre, 2 ^ 32 n’est pas un nombre impair, vous n’avez donc qu’un seul nombre au milieu. Les entiers positifs ont un chiffre de moins tandis que les négatifs obtiennent la moitié complète 2 147 483 648.

Et c'est tout. Cela dépend de la machine et non de la langue.

0
Emos Turi