2012-03-23 100 views
19

我發現在遊戲這行代碼,我學習奇怪的表情

int charaCode = arc4random() % (126-'!'+1)+'!'; 

我知道什麼是arc4random但表情很奇怪我。

什麼是

(126-'!'+1)+'!' 

的目的,它始終計算爲127

+8

這不是整個表達式'i%j + 1'是'(i%j)+ 1',因此它是'(arc4random()%(126 - '!'+ 1))+'!'' – gbulmer 2012-03-23 15:09:00

回答

32

你理解錯了:在%運營商具有比+更高的優先級。

所以,實際上,你有:

int charaCode = (arc4random() % (126-'!'+1))+'!'; 

其剪輯功能結果0..93,並使其與'!'開始轉變了。

所以你得到的有效範圍是33..126(它是從!~的所有可見ASCII字符的範圍)。

+2

重要的是要注意,該範圍包含所有可見ascii字符的值。 – mydogisbox 2012-03-23 15:12:29

+3

是的,有效範圍是'33..126'('!'..'〜'),而不是'32..125'。 – 2012-03-23 15:15:28

+0

thx編輯 - 有點不對。嘿ho - thx所有upvotings! :-) – glglgl 2012-03-24 15:29:50

2

%+更高的優先級,讓你的表達是不一樣的

arc4random() % ((126-'!'+1)) + '!'), 

但它的與

(arc4random() % (126-'!'+1)) + '!' 

第一個版本可以返回低於33的值,而第二個版本不能。

4

這是基於這樣的運算符優先級評價:

(arc4random() % (126-'!'+1)) + '!'; 
1

不是整個表達式i % j + 1(i%j)+1所以這是(arc4random() % (126-'!'+1)) + '!'

衛生署!我應該只是發佈答案ROFL :-)

1

我相信他們只是試圖限制結果爲可打印的字符。基本上它將隨機數的範圍限制在字符「!」之間的所有內容。和「〜」。

+0

如果我做的arc4random()%(10 + 1)不應該最高可能的數字是10? – kailoon 2012-03-23 15:15:06

+0

是的,謝謝,你說得對。 – 2012-03-23 15:16:10