Je dois stocker la valeur maximale d'un NSInteger dans un NSInteger ? Quelle est la syntaxe correcte pour le faire ?
Merci.
Je dois stocker la valeur maximale d'un NSInteger dans un NSInteger ? Quelle est la syntaxe correcte pour le faire ?
Merci.
La valeur maximale d'un NSInteger est de NSIntegerMax .
@Mark : sur actuel mises en œuvre. De futures implémentations pourraient choisir une valeur différente, mais on espère que non.
@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.
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.
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.
pour 64 bits, la plage maximale pour NSInteger est : LONG_MAX : 9223372036854775807
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 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.