2012-03-23 98 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