symbol = (rand() % ('~' - ' ' + 1)) + ' ';我明白,每次我运行程序的“符号”都是不同的。但是,为什么我不能用
symbol = rand();发布于 2017-02-21 17:34:35
Ascii
~是126space是32因此,symbol = (rand() % ('~' - ' ' + 1)) + ' ';相当于:
symbol = (rand() % (126 - 32 + 1)) + 32;,它给出了一个介于32 126和之间的随机数。
C99 7.20.2.1
rand函数计算范围0到RAND_MAX的伪随机整数序列. RAND_MAX宏的值应至少为32767。
如果您希望在和min之间(max(32767,RAND_MAX),TYPE_SYMBOL_MAX)之间使用symbol=rand(),并且只要类型允许使用,则可以使用。
发布于 2017-02-21 17:37:14
C中的字符常量是整数。因此,以下情况:
('~' - ' ' + 1)计算'~'编码与' '编码的偏移量,并将其添加到其中。而是它们之间有多少不同的字符编码,让我们称其为m。
(rand() % ('~' - ' ' + 1))获取一个伪随机数并将其映射到范围[0, m),让我们将该数字称为n。
(rand() % ('~' - ' ' + 1)) + ' '这只需将n作为偏移量处理,并将其添加到' '的编码中,从而获得符号的编码。这个符号将永远是一个特定的集合之一。
symbol = rand();以上将将可能位于char范围之外的整数转换为某个字符值。这将以某种实现定义的方式进行。至少可以说,这不是获得正确结果的最可靠的方法。
https://stackoverflow.com/questions/42374089
复制相似问题