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?
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
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.
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.
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 Not A VAX 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.
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
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.
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).
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.
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).
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.