【问题标题】:Generating a random negative NSInteger生成一个随机的负 NSInteger
【发布时间】:2017-03-03 10:39:49
【问题描述】:

我正在尝试使用以下代码生成随机负 NSInteger,

+ (NSInteger)getNegativeRandomNumber {
    uint32_t random = arc4random_uniform(2147483647); // where 2147483647 is the max 32-bit positive value returned by random function
    return (NSInteger)(-1 * random); // convert the positive into negative number
}

但偶尔这段代码会给我正数。您是否发现此代码有任何问题?

【问题讨论】:

  • return -(NSInteger)random;。问题在于 64 位和 32 位架构,而NSInteger 的定义不同。而你正在随机进行- sutff 和铸造。

标签: ios objective-c random nsinteger


【解决方案1】:

你得到负数

return -(NSInteger)random;

您需要首先强制转换为有符号类型。

【讨论】:

  • 可能会很好地解释为什么会这样(即否定一个无符号数将返回一个无符号数,因此您需要先转换为有符号数)。
【解决方案2】:

这肯定会有所帮助....

-(int) generateRandomNumberWithlowerBound:(int)0
                               upperBound:(int) 2147483647
{
    int rndValue = lowerBound + arc4random() % (upperBound - lowerBound);
    return -(NSInteger)(rndValue);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 2011-09-18
    • 2018-04-21
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多