35 votes

Quelle est la valeur maximale de NSInteger ?

Je dois stocker la valeur maximale d'un NSInteger dans un NSInteger ? Quelle est la syntaxe correcte pour le faire ?

Merci.

92voto

Chuck Points 138930

La valeur maximale d'un NSInteger est de NSIntegerMax .

7 votes

@Mark : sur actuel mises en œuvre. De futures implémentations pourraient choisir une valeur différente, mais on espère que non.

1 votes

@Cfr : Merci pour le lien, mais ce nombre n'est pas correct. Sur les systèmes 32 bits, NSInteger ne peut pas représenter 4294967295 (le nombre que vous avez donné est la valeur maximum d'un non signé entier 32 bits), et sur les systèmes 64 bits, il peut aller beaucoup plus loin que cela.

11 votes

Oh désolé, en fait je cherchais NSUIntegerMax / ULONG_MAX et j'ai trouvé cette réponse. NSUIntegerMax es 4294967295 tandis que NSIntegerMax es 2147483647 sur les systèmes 32 bits. Parfois, la valeur elle-même est utile, par exemple, lorsque vous voulez comprendre s'il est possible de déborder l'ID typée comme integer.

13voto

Mitch Wheat Points 169614

La valeur maximale d'un NSInteger est la suivante NSIntegerMax

(de Référence des constantes de la fondation )

4voto

Aks Points 369

Pour 32 bits et 64 bits, il existe deux conventions : a)ILP32 b)LP64

Le runtime 32 bits utilise une convention appelée ILP32, dans laquelle les entiers, les entiers longs et les pointeurs sont des quantités 32 bits. Le runtime 64 bits utilise la convention LP64 ; les entiers sont des quantités 32 bits, et les entiers longs et les pointeurs sont des quantités 64 bits. Ces conventions correspondent à l'ABI des applications exécutées sous OS X (de même, les conventions Cocoa Touch correspondent aux types de données utilisés dans Cocoa), ce qui facilite l'écriture d'un code interopérable entre les deux systèmes d'exploitation.

Le tableau 1-1 présente tous les types d'entiers couramment utilisés dans le code Objective-C. Chaque entrée comprend la taille du type de données et son alignement attendu en mémoire. Les entrées en surbrillance du tableau indiquent les endroits où la convention LP64 diffère de la convention ILP32. Ces différences de taille indiquent les endroits où le comportement de votre code change lorsqu'il est compilé pour le runtime 64 bits. Le compilateur définit la convention LP64 lors de la compilation pour le runtime 64 bits.

enter image description here

pour 64 bits, la plage maximale pour NSInteger est : LONG_MAX : 9223372036854775807

2voto

Andy B Points 196

Il m'a fallu un peu de temps pour comprendre pourquoi j'obtenais une valeur différente de NSIntegerMax lorsque j'utilisais NSUInteger ! !!

Et le maximum pour un NSUInteger est NSUIntegerMax.

(également de http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Miscellaneous/Foundation_Constants/Reference/reference.html )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X