【发布时间】:2012-12-15 04:55:06
【问题描述】:
32 位整数的最大值为:2^31-1 = 2147483647。 但只有负数和正数。因为数字的一半是负数。 所以真正的最大值是 2^32-1 = 4294967295。但在这种情况下,我们只使用正数。
好的,正常的 int 既是负数又是正数。 我只想使用正数,因为我希望最大值为:4294967295。 我要使用 “无符号整数” 代替 “整数”
但这行不通! 最大值仍然是 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 视为最大值。
怎么了?当我从我的文本字段中获取数字时,我应该使用 unsigned intValue 吗?
乔纳森
您可以在此处阅读有关此号码的信息。 :http://en.wikipedia.org/wiki/2147483647
【问题讨论】:
-
是的,我相信你需要使用无符号整数。一旦你停止使用它,所有的值都会被扔到有符号的 int 最大值。另外,如果您对如何完成某事有想法,何不尝试一下?
-
@JonathanGurebo 顺便说一句,如果你真的关心大于
2,147,483,647的数字,你应该注意rand()永远不会生成大于RAND_MAX、@987654326 的数字@。您可能应该调整您的随机数算法。尝试在0和4,294,967,295之间生成数字,你会发现你永远不会得到大于2,147,483,647的值。 -
如果使用iOS 4.3或更高版本,请使用
ranNumber = arc4random_uniform(maxNumber-minNumber+1) + minNumber;,解决了rand()的RAND_MAX问题,支持到UINT32_MAX。 -
为什么不使用 double 或 float :)