2017-03-03 27 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

可能很好解釋爲什麼這是這種情況(即否定一個無符號數將返回一個無符號數,所以你需要先轉換爲signed)。 –

0

這必將有助於....

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