2010-09-09 23 views

Répondre

4

Il est impossible pour une opération mod-2 pour revenir 2 seulement 0 ou 1. Je suppose, dans ce cas, qu'il serait 0.

+1

'0' est la bonne réponse - mais seulement si vous jetez' nil' dans un type entier en premier. –

+0

Désolé typo. Merci pour la correction. – David

+0

(int) nil% 2 = 0. Merci. – David

0

En fait, la réponse est une erreur du compilateur. nil est un pointeur (défini comme (void *)0) et les seules opérations arithmétiques définies pour les pointeurs sont l'addition et la soustraction. Mais si vous voulez savoir ce que 0% 2 est la réponse de Noé est juste.

+0

Pour être juste, nul n'est '' (void *) 0' c'est '(id) 0' – jer

+0

Non. Regardez '/ usr/include/objc/objc.h'. Là, 'nil' est défini comme' __DARWIN_NULL' qui à son tour est défini dans '/ usr/include/sys/_types.h' comme' ((void *) 0) 'pour le code C. Aussi l'erreur du compilateur dit que vous ne pouvez pas utiliser '%' sur 'void *'. – Sven

+0

Il est conceptuellement '(id) 0' car tout type de pointeur n'est pas un type de récepteur valide. Par exemple, '[(void *) 0x1234 description]' affichera un avertissement selon lequel 'void *' est un type de récepteur invalide, mais '[(id) 0x1234 description]' ne montre pas ce même avertissement. – dreamlax