J'essaie d'utiliser l'opérateur modulo (%) sur des longs longs, et il semble retourner 0 si le nombre est au-dessus de la plage d'un entier non signé. Y a-t-il un opérateur ou une fonction que je devrais utiliser à la place ou dois-je lancer le mien?Modulo avec longs entiers longs dans Objective C
- Mise à jour: désolé pour le manque de code exemple avant, j'étais pressé, de sortir la porte -
Voici le code:
long long val = 12345678991245; // always less than LLONG_MAX
int power = 0;
NSMutableArray *powers = [[NSMutableArray alloc] init];
while (pow(10, power) <= val) {
tVal = (val % (lround(pow(10, power + 1))))/lround(pow(10, power));
[powers addObject:[NSNumber numberWithInt:tVal]];
NSLog(@"Power: %d tVal: %d", power, tVal);
val -= val % lround(pow(10, power + 1));
power++;
}
Quand vous regardez la sortie faite par cette déclaration NSLog
, bien que, vous voyez quand le nombre dépasse UINT_MAX
(pour le nombre 1,111,111,111,111):
2009-03-18 20:42:16.471 Numbers[11197:20b] Power: 0 tVal: 1
2009-03-18 20:42:16.472 Numbers[11197:20b] Power: 1 tVal: 1
2009-03-18 20:42:16.473 Numbers[11197:20b] Power: 2 tVal: 1
2009-03-18 20:42:16.476 Numbers[11197:20b] Power: 3 tVal: 1
2009-03-18 20:42:16.476 Numbers[11197:20b] Power: 4 tVal: 1
2009-03-18 20:42:16.477 Numbers[11197:20b] Power: 5 tVal: 1
2009-03-18 20:42:16.477 Numbers[11197:20b] Power: 6 tVal: 1
2009-03-18 20:42:16.477 Numbers[11197:20b] Power: 7 tVal: 1
2009-03-18 20:42:16.477 Numbers[11197:20b] Power: 8 tVal: 1
2009-03-18 20:42:16.478 Numbers[11197:20b] Power: 9 tVal: 0
2009-03-18 20:42:16.478 Numbers[11197:20b] Power: 10 tVal: 0
2009-03-18 20:42:16.479 Numbers[11197:20b] Power: 11 tVal: 0
2009-03-18 20:42:16.479 Numbers[11197:20b] Power: 12 tVal: 0
Tout est casher jusqu'à vous obtenez jusqu'à UINT_MAX
passé, alors il renvoie juste 0.
Je compile contre le SDK de l'iPhone en utilisant Xcode 3.1.2.
Des idées?
Svp être plus spécifique (montrer le code, quel argument/résultat est au-dessus de la gamme int, quel est votre compilateur/plate-forme ...). En tout cas, je suppose que c'est un bug du compilateur. – starblue
"Il semble"? N'étant pas un gourou ObjC, mais je pense que démontrer le problème avec un morceau de code serait génial. Peut-être avez-vous un problème avec la partie "ça semble", puisque je n'ai pas trouvé de références aux limites de module ailleurs. – DevSolar