微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iOS – int(unsigned int)最大值是2147483647,unsigned int不起作用?

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;

}

这将查看: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;

原文地址:https://www.jb51.cc/iOS/331086.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐