对于我的应用程序(OSX,而不是IOS),我有一个如下生成的几何序列(存储在容器数组中):
- (void)initContainerFor:(NSInteger)maxRows
{
self.container = [[NSMutableArray alloc] init];
NSInteger start = [self.firstTextFieldValue integerValue];
NSInteger ratio = [self.secondTextFieldValue integerValue];
// ASCENDING
for (NSInteger i = 1; i < (maxRows +1 ); i++)
{
NSInteger currentValue = start * pow(ratio,i-1);
[self.container addObject:currentValue];
}
}
用户可以输入&#34;开始&#34;和&#34;比率&#34;整数。如果超出限制(MAX_INT),我想给出反馈。我写了这个函数:
- (BOOL)maxCheck
{
if ([self.container lastObject] > INT_MAX)
return false;
return true;
}
但这似乎不起作用。如果我输入2表示开始,200表示比例,我有这个容器内容:
Container: (
2,
400,
80000,
16000000,
"-1094967296",
49872896,
1384644608,
2051014656,
"-2113929216",
0
)
请帮助理解我在容器中看到的内容(字符串??)以及如何正确检查最大值。
答案 0 :(得分:1)
从数组日志中可以看出,当下一个元素变为负数时,实际上超过了INT_MAX限制两次。因此,您只需将检查添加到initContainer:方法 - 如果元素小于先前的INT_MAX限制。
提示:INT_MAX是签名值。
答案 1 :(得分:0)
您无法将溢出后的值与INT_MAX
进行比较,因为溢出已经发生。或者换句话说,通过它的定义和语义,没有整数可以大于INT_MAX
。
您可以测试的是
[self.container lastObject] > INT_MAX/ratio
找到在下一步中会导致溢出的序列元素。