Objective c 最大值和最小值的算法?(目标-C)

Objective c 最大值和最小值的算法?(目标-C),objective-c,max,min,Objective C,Max,Min,这是我为学习Objective-C而阅读的一本书的一部分 下面定义了一个名为MAX的宏,该宏最多提供两个 值:#定义最大值(a,b)((a)>(b))?(a):(b)) 然后书中有一些练习,要求读者定义一个宏(MIN),以找到两个值中的最小值,另一个练习要求定义一个名为MAX3的宏,该宏给出最多3个值。我认为这两个定义看起来类似于MAX,但我不明白MAX公式是如何找到最大值的。我是说如果我这么做的话 int limits = MAX (4,8) 它将只分配限制值8。这与查找变量的最大值有什么关

这是我为学习Objective-C而阅读的一本书的一部分

下面定义了一个名为MAX的宏,该宏最多提供两个 值:
#定义最大值(a,b)((a)>(b))?(a):(b))

然后书中有一些练习,要求读者定义一个宏(
MIN
),以找到两个值中的最小值,另一个练习要求定义一个名为
MAX3
的宏,该宏给出最多3个值。我认为这两个定义看起来类似于
MAX
,但我不明白
MAX
公式是如何找到最大值的。我是说如果我这么做的话

int limits = MAX (4,8)

它将只分配
限制
值8。这与查找变量的最大值有什么关系?

通常,您将使用MAX()或MIN()宏来获取一对变量、一个变量和一个常量、甚至一对宏常量或其他非文字常量表达式中的高/低值。您通常不会像在问题中那样提供2个文本常量。

我认为您混淆了值和变量。您列出的宏示例扩展为两个值之间的比较,并返回两个值中的较大值(即,
a
b
)。因此,您是对的,
int limits=MAX(4,8)
只是将
8
分配给
限制
,而与查找可以存储在
限制中的最大值无关

header limits.h定义了许多值,如
INT\u MAX
,这些值将告诉您有关系统上变量类型的最小/最大值的信息。

要将其分开:

宣言:

#define MAX(a,b)
如果
a
大于
b
,则使用
a
否则使用
b

( ((a) > (b)) ? (a) : (b) )
然后,要创建
MIN
表达式,请使用类似的形式:

#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
                        ^
具体来说,此宏用于标量(C内置),可以使用
进行比较。如果您传递一个objc变量,它将导致地址的比较,MAX将返回具有更高地址的变量(如果您确实想要比较objc实例的地址,这将是非常罕见的)

还要注意的是,这是宏如何咬你的经典例子。对于宏,预处理器只需在适当的位置展开(文本复制/粘贴)参数,因此:
int limits=MAX(4,8)
逐字展开为
int limits=(4>8?4:8)
。如果写入
MAX(x,++y)
,那么如果
y
大于或等于
x
,则
y
将增加两次,因为它扩展到:
int limits=(x>++y?x:++y)
MAX算法(Objective-C)


除非常数是从
constexpr
函数或
#define
中推断出来的,否则请给出书名,以便其他人可以避免——关于C/Objective-C/C++的现代书籍不应提倡在适合内联函数的情况下使用宏。请逐字阅读。答案是黄色的:“这会给出两个值的最大值”。只有两个值可供选择,它可以返回的最大值是多少。
#define MAX3(a,b,c) ( MAX(a, MAX(b,c)) )
 // get max value
- (float)maxValue:(NSArray *)arrValue
{
    float maxValue = 0.0;
    for (NSString *value in arrValue) {
        float compareValue = [value floatValue];

        if (compareValue > maxValue) {
            maxValue = compareValue;
        }

    }

    return maxValue;
}


NSArray *number=[NSArray arrayWithObjects:[NSNumber numberWithFloat:57.02], [NSNumber numberWithFloat:55.02], [NSNumber numberWithFloat:45.02], nil];

NSLog(@"%f", [self maxValue:number]);

result 57.020000