2017-03-03 9 views
0

NSInteger、ランダム負の私は、次のコードを使用してランダムな負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 
} 

しかし、時折、このコードは私に正の数を与えるの生成。このコードに問題はありますか?

+2

'リターン - (NSInteger)ランダム;'。この問題は64ビットと32ビットのアーキテクチャーが原因であり、 'NSInteger'は同じ定義ではありません。そして、あなたはランダムとキャスティングで '' sutffをやっています。 – Larme

答えて

2

あなたは、あなたが署名した型にキャストする最初が必要

return -(NSInteger)random; 

と負の数を取得します。

+0

これはなぜそうであるかを説明するのが良いでしょう(つまり、符号なしの数値を無効にすると符号なしの数値が返され、最初に符号付きの数値に変換する必要があります)。 –

0

これは確かに役立ちます....

-(int) generateRandomNumberWithlowerBound:(int)0 
           upperBound:(int) 2147483647 
{ 
    int rndValue = lowerBound + arc4random() % (upperBound - lowerBound); 
    return -(NSInteger)(rndValue); 
} 
関連する問題