我發現在遊戲這行代碼,我學習奇怪的表情
int charaCode = arc4random() % (126-'!'+1)+'!';
我知道什麼是arc4random但表情很奇怪我。
什麼是
(126-'!'+1)+'!'
的目的,它始終計算爲127
我發現在遊戲這行代碼,我學習奇怪的表情
int charaCode = arc4random() % (126-'!'+1)+'!';
我知道什麼是arc4random但表情很奇怪我。
什麼是
(126-'!'+1)+'!'
的目的,它始終計算爲127
你理解錯了:在%
運營商具有比+
更高的優先級。
所以,實際上,你有:
int charaCode = (arc4random() % (126-'!'+1))+'!';
其剪輯功能結果0..93
,並使其與'!'
開始轉變了。
所以你得到的有效範圍是33..126
(它是從!
到~
的所有可見ASCII字符的範圍)。
重要的是要注意,該範圍包含所有可見ascii字符的值。 – mydogisbox 2012-03-23 15:12:29
是的,有效範圍是'33..126'('!'..'〜'),而不是'32..125'。 – 2012-03-23 15:15:28
thx編輯 - 有點不對。嘿ho - thx所有upvotings! :-) – glglgl 2012-03-24 15:29:50
%
比+
更高的優先級,讓你的表達是不一樣的
arc4random() % ((126-'!'+1)) + '!'),
但它的與
(arc4random() % (126-'!'+1)) + '!'
第一個版本可以返回低於33的值,而第二個版本不能。
這是基於這樣的運算符優先級評價:
(arc4random() % (126-'!'+1)) + '!';
不是整個表達式i % j + 1
是(i%j)+1
所以這是(arc4random() % (126-'!'+1)) + '!'
衛生署!我應該只是發佈答案ROFL :-)
我相信他們只是試圖限制結果爲可打印的字符。基本上它將隨機數的範圍限制在字符「!」之間的所有內容。和「〜」。
如果我做的arc4random()%(10 + 1)不應該最高可能的數字是10? – kailoon 2012-03-23 15:15:06
是的,謝謝,你說得對。 – 2012-03-23 15:16:10
這不是整個表達式'i%j + 1'是'(i%j)+ 1',因此它是'(arc4random()%(126 - '!'+ 1))+'!'' – gbulmer 2012-03-23 15:09:00