算法的最大和最小? (目标C)(Algorithm for max and min? (Obje

2019-09-20 09:32发布

这是一本书我读学习Objective-C中的一部分。

以下定义了一个名为MAX宏给出最大两个值之一: #define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )

再就是在询问读者定义一个宏(本书一些练习MIN ),以找出最小的两个值,另一个是要求来定义宏调用MAX3给出最大3个的值。 我认为这两个定义将类似于MAX ,但我不知道该怎么MAX的公式查找最大值。 我的意思是,如果我只是做了这个

int limits = MAX (4,8)

它只会分配limits的8值是什么有找到一个变量的最大值呢?

Answer 1:

我想你混淆了价值与变量。 你列出的宏示例扩展到两个值之间的比较,返回两个值中的较大(即,较大, ab )。 所以,你是对的, int limits = MAX(4,8)只是分配8limits ,有没有关系找到你可以存储的最大值limits

头limits.h中定义了许多值一样INT_MAX会告诉你关于你的系统上的最小/最大变量类型的值的信息。



Answer 2:

为了打破它拆开:

声明:

#define MAX(a,b)

如果a大于b ,用a别人使用b

( ((a) > (b)) ? (a) : (b) )

然后创建一个MIN表达,使用了类似的形式:

#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
                        ^

然后创建一个MAX3的表情,你可以将它们组合起来:

#define MAX3(a,b,c) ( MAX(a, MAX(b,c)) )

具体地,该宏的旨在与可使用进行比较的标量(C建宏)中使用<> 。 如果你通过了objc变量,它会导致地址比较和MAX将返回具有较高地址的一个(这将是非常罕见的,如果你真的想比较objc实例的地址)。

另外请注意,这是宏如何咬你一个经典的例子。 用宏,预处理器简单地扩展(文本复制/粘贴)的参数在适当位置,所以: int limits = MAX (4,8)从字面上膨胀以int limits = (4 > 8 ? 4 : 8) 如果写MAX(x,++y)然后y将递增两次,如果y大于或等于x ,因为它扩展为: int limits = (x > ++y ? x : ++y)



Answer 3:

通常,将使用一个MAX()或MIN()宏得到以较高者为准/一对变量的下部,或一个可变的和恒定的,或甚至一对宏常数或其他非字面常量表达式的。 你,你在你的问题做了一般不会提供2个字面常量。



Answer 4:

算法MAX(目标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


文章来源: Algorithm for max and min? (Objective-C)