我发现在游戏这行代码,我学习奇怪的表情
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