32位整数的最大值为:2 ^ 31-1 = 2147483647.
但只是负数和正数.因为这个数字的一半是负数.
所以真正的最大值是2 ^ 32-1 = 4294967295.但在这种情况下我们只使用正数.
但只是负数和正数.因为这个数字的一半是负数.
所以真正的最大值是2 ^ 32-1 = 4294967295.但在这种情况下我们只使用正数.
好的,正常的int是负数和正数.
我想只使用正数,因为我希望最大值为:4294967295.
我打算用
“unsigned int”
代替
“INT”
但这不行!
最大值仍为2147483647.
-(Action for my button) { unsigned int minNumber; unsigned int maxNumber; unsigned int ranNumber; minNumber=[self.textFieldFrom.text intValue]; //getting numbers from my textfields maxNumber=[self.textFieldTo.text intValue]; //Should i use unsigned intValue? ranNumber=rand()%(maxNumber-minNumber+1)+minNumber; NSString *str = [NSString stringWithFormat:@"%d",ranNumber]; self.label.text = str; }
这将查看:2147483647作为最大值.
怎么了?当我从textFields获取数字时,我应该使用unsigned intValue吗?
乔纳森
在这里你可以读到这个数字. :http://en.wikipedia.org/wiki/2147483647
解决方法
问题是intValue返回一个int(不是unsigned int),最大值为2,147,483,647.如果需要大于INT32_MAX,则使用长变量和NSString方法longLongValue而不是intValue.
是的,%d已签名,但如果使用%u,则无法解决intValue的问题.使用long long变量和longlongValue方法将解决这个问题.例如:
NSString *string = @"2147483650"; unsigned int i = [string intValue]; NSLog(@"i = %u",i); // returns 2147483647 NSUInteger j = [string integerValue]; NSLog(@"j = %u",j); // returns 2147483647 long long k = [string longLongValue]; NSLog(@"k = %lld",k); // returns 2147483650
因此,查看原始代码,可能是:
long long minNumber; long long maxNumber; long long ranNumber; minNumber = [self.textFieldFrom.text longLongValue]; maxNumber = [self.textFieldTo.text longLongValue]; ranNumber = arc4random_uniform(maxNumber-minNumber+1) + minNumber; NSString *str = [NSString stringWithFormat:@"%lld",ranNumber]; self.label.text = str;