奇怪的表达

时间:2012-03-23 15:05:40

标签: c

我在我研究的游戏中找到了这行代码

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

我知道arc4random是什么,但表达式对我来说很奇怪。

的目的是什么?
(126-'!'+1)+'!'

总是评估为127。

5 个答案:

答案 0 :(得分:32)

您解释错误:%运算符的优先级高于+

所以,实际上,你有:

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

将功能结果剪辑到0..93并将其移动,使其以'!'开头。

因此,您获得的有效范围是33..126(这是从!~的所有可见ASCII字符的范围。)

答案 1 :(得分:4)

这是根据运算符优先级评估的,如下所示:

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

答案 2 :(得分:2)

%的优先级高于+,因此您的表达式与

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

但与

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

第一个版本可以返回低于33的值,而第二个版本则不能。

答案 3 :(得分:1)

这不是整个表达式i % j + 1 (i%j)+1所以(arc4random() % (126-'!'+1)) + '!'

卫生署!我应该发表回答ROFL: - )

答案 4 :(得分:1)

我相信他们只是试图将结果限制为可打印字符。基本上它将随机数的范围限制在字符“!”之间的所有内容。和“〜”。