我在我研究的游戏中找到了这行代码
int charaCode = arc4random() % (126-'!'+1)+'!';
我知道arc4random是什么,但表达式对我来说很奇怪。
的目的是什么?
(126-'!'+1)+'!'
总是评估为127。
答案 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)
我相信他们只是试图将结果限制为可打印字符。基本上它将随机数的范围限制在字符“!”之间的所有内容。和“〜”。