2010-12-04 37 views
1

Je suis en train d'obtenir une chaîne en utilisant un CGFloat, quelque chose comme ça ..Comment convertir un CGFloat à un entier non signé

helpMessage = [NSString stringWithFormat:@"The unsigned integer value is %i", (unsigned int)myCGFloat]; 

Cela ne veut pas travailler. Étant donné une valeur CGFloat de -2, j'obtiens 0 dans la chaîne.

Si je ...

helpMessage = [NSString stringWithFormat:@"The unsigned integer value is %i", (int)myCGFloat]; 

Je reçois -2. Ça se rapproche. Donc j'ai pensé que je pourrais utiliser @u comme le spécificateur de format mais je reçois 4294967294.

Qu'est-ce que je fais mal.

Merci d'avance pour toute aide. Cela devrait être facile.

John

+1

Quel résultat espérez-vous obtenir pour -2? – grahamparks

Répondre

1

Vous essayez donc de convertir -2 en un entier non signé? L'entier non signé ne peut pas être inférieur à 0. Il va donc être représenté incorrectement.

+0

OK. J'ai compris. Je l'ai compris. Cela fonctionne pour ce que j'essaie de faire ... – user278859

3

Vous obtenez 4294967294 parce que, après la conversion de votre valeur à un unsigned int, il n'y a pas un peu qui peut être utilisé pour représenter la négativité de -2, de sorte que la valeur « sousverses » par 2 au lieu, pour ainsi dire:

0 
4294967295 (-1) 
4294967294 (-2) 

Vous devez formater en tant qu'entier entier (%i) si vous souhaitez afficher des valeurs négatives. La plage d'un entier signé de 32 bits est -2147483648 à 2147483647, tandis que la plage d'un entier 32 bits non signé est 0 à 4294967295.

1

Ok. Merci pour les réponses que je pensé à elle ...

helpMessage = [NSString stringWithFormat:@"The abasolute value is %i", abs((int)myCGFloat]); 

j'avais directement essayé abs sur le CGFloat, mais je vois maintenant que abs attend une valeur int. Je pensais qu'un int non signé était la même chose qu'une valeur absolue. Merci de m'avoir mise directement.

John

+0

Oooops qui aurait dû être ... (abs) (int) myCGFloat; – user278859

+0

Jeeez ne peut pas obtenir ce droit ... (abs) ((int) myCGFloat); – user278859

+0

vous savez que vous pouvez modifier les messages existants –