Jon*_*ebo 6 int unsigned integer ios
32位整数的最大值是:2 ^ 31-1 = 2147483647.但只有负数和正数.因为这个数字的一半是负数.所以真正的最大值是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;
}
Run Code Online (Sandbox Code Playgroud)
这将查看:2147483647作为最大值.
怎么了?当我从textFields获取数字时,我应该使用unsigned intValue吗?
乔纳森
在这里你可以读到这个数字.:http://en.wikipedia.org/wiki/2147483647
问题是intValue返回a int(不是unsigned int)并且最大值为2,147,483,647.如果需要大于INT32_MAX,则使用long变量和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
Run Code Online (Sandbox Code Playgroud)
因此,查看原始代码,可能是:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21072 次 |
| 最近记录: |