Algorithme pour max et min? (Objective-C)
Cette est une partie d'un livre que je suis en train de lire pour apprendre l'Objective-C.
Le suivant définit une macro appelée MAX qui donne le maximum de deux
valeurs:#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )
Et puis il y a des exercices dans le livre qui invite le lecteur à définir une macro (MIN
) pour trouver le minimum de deux valeurs et l'autre qui vous demande de définir une macro appelée MAX3
qui donne le maximum de 3 valeurs. Je pense que ces deux définitions est similaire à MAX
, mais je ne comprends pas comment les MAX
formule trouve la valeur maximale. Je veux dire si j'ai juste fait ce
int limits = MAX (4,8)
Il vous suffit d'attribuer limits
la valeur de 8. Quel est le rapport avec la conclusion d'une variable est la valeur maximale?
Lire la lettre. La réponse est là, en jaune: "qui donne le maximum de DE deux valeurs". Il y a seulement deux valeurs à choisir, quel est le maximum qu'il peut revenir.
OriginalL'auteur stumped | 2012-07-29
Vous devez vous connecter pour publier un commentaire.
Je pense que vous confondez valeur et la variable. L'exemple de macro que vous avez énumérés se développe à une comparaison entre deux valeurs et renvoie la plus grande des deux valeurs (c'est à dire qui est plus grand,
a
oub
). Donc, vous êtes en droit,int limits = MAX(4,8)
attribue8
àlimits
et n'a rien à voir avec la recherche de la valeur maximale que vous pouvez stocker danslimits
.L'en-tête limites.h définit le nombre de valeurs comme
INT_MAX
qui vous dira d'informations sur les valeurs min/max de types de variables sur votre système.OriginalL'auteur Roth Michaels
Pour qu'elles s'effondrent:
La déclaration:
Si
a
est plus grand queb
, utiliseza
d'autre deb
:Puis de créer un
MIN
expression, utiliser une forme similaire:Puis de créer un
MAX3
expression, vous pouvez les combiner:Plus précisément, cette macro est destiné à être utilisé avec des scalaires (C les builtins) qui peuvent être comparées en utilisant
<
ou>
. Si vous avez passé une objc variable, il en résulterait la comparaison des adresses et MAX serait de retour celui avec la plus grande adresse (il serait très rare, si vous avez réellement voulu comparer les adresses de objc cas).Également noter que c'est l'exemple classique de la façon dont les macros peuvent vous mordre. Avec les macros du préprocesseur simplement se développe (texte copier/coller) les paramètres en place, de sorte que:
int limits = MAX (4,8)
littéralement étend àint limits = (4 > 8 ? 4 : 8)
. Si vous écrivezMAX(x,++y)
, puisy
sera incrémenté deux fois siy
est supérieure ou égale àx
parce qu'il se développe à:int limits = (x > ++y ? x : ++y)
.OriginalL'auteur justin
en général, vous utilisez un MAX() et MIN() macro pour obtenir le chiffre le plus élevé/bas d'une paire de variables, ou d'une variable et une constante, ou même une paire de macro constantes ou d'autres non-littérale des expressions constantes. en général, vous n'aurez pas à fournir 2 constantes littérales comme vous l'avez fait dans votre question.
constexpr
fonction ou d'un#define
...OriginalL'auteur john.k.doe
Algorithme pour max (Objective-C)
OriginalL'auteur Indra