首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当应用于字符运算时,模运算符意味着什么?

当应用于字符运算时,模运算符意味着什么?
EN

Stack Overflow用户
提问于 2017-02-21 17:31:00
回答 2查看 272关注 0票数 0
代码语言:javascript
复制
symbol = (rand() % ('~' - ' ' + 1)) + ' ';

我明白,每次我运行程序的“符号”都是不同的。但是,为什么我不能用

代码语言:javascript
复制
symbol = rand();
EN

回答 2

Stack Overflow用户

发布于 2017-02-21 17:34:35

Ascii

  • ~是126
  • space是32

因此,symbol = (rand() % ('~' - ' ' + 1)) + ' ';相当于:

代码语言:javascript
复制
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(),并且只要类型允许使用,则可以使用

票数 1
EN

Stack Overflow用户

发布于 2017-02-21 17:37:14

C中的字符常量是整数。因此,以下情况:

代码语言:javascript
复制
('~' - ' ' + 1)

计算'~'编码与' '编码的偏移量,并将其添加到其中。而是它们之间有多少不同的字符编码,让我们称其为m

代码语言:javascript
复制
(rand() % ('~' - ' ' + 1))

获取一个伪随机数并将其映射到范围[0, m),让我们将该数字称为n

代码语言:javascript
复制
(rand() % ('~' - ' ' + 1)) + ' '

这只需将n作为偏移量处理,并将其添加到' '的编码中,从而获得符号的编码。这个符号将永远是一个特定的集合之一。

代码语言:javascript
复制
symbol = rand();

以上将将可能位于char范围之外的整数转换为某个字符值。这将以某种实现定义的方式进行。至少可以说,这不是获得正确结果的最可靠的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42374089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档