我已經偶然發現了一個非常令人驚訝的問題,同時做一些隨機數的iOS的東西。在同一行代碼上生成兩個隨機數?
比較這些:
一)
int xOffsetSign = randomIntWithUpperLimit(2) ? 1:-1;
int yOffsetSign = randomIntWithUpperLimit(2) ? 1:-1;
int xOffset = randomIntWithUpperLimit(50) * xOffsetSign;
int yOffset = randomIntWithUpperLimit(50) * yOffsetSign;
B)
int xOffset = randomIntWithUpperLimit(50) * randomIntWithUpperLimit(2) ? 1:-1;
int yOffset = randomIntWithUpperLimit(50) * randomIntWithUpperLimit(2) ? 1:-1;
這是隨機函數:
static inline int randomIntWithUpperLimit(unsigned int upperLimit) {
return arc4random_uniform(upperLimit);
}
在我的腦海裏,無論a)和b)應該在th中產生隨機數e [-49,49]範圍。但是,只有a)有效。 b)僅產生[-1,1]範圍內的數字。
看起來,每個調用的第二個隨機部分首先被解析,被緩存,然後重新用於該行的第一部分,而不管上限。
有人可以解釋和澄清爲什麼b)不起作用嗎?
Doh!多麼愚蠢的錯誤。謝謝大家的答案。 –