Objective c 最大值和最小值的算法?(目标-C)
这是我为学习Objective-C而阅读的一本书的一部分 下面定义了一个名为MAX的宏,该宏最多提供两个 值: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。这与查找变量的最大值有什么关
#定义最大值(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