C 当应用于字符算术时,模运算符意味着什么?
我知道每次我运行程序“symbol”都是不同的。但是,为什么我不能使用C 当应用于字符算术时,模运算符意味着什么?,c,modulo,C,Modulo,我知道每次我运行程序“symbol”都是不同的。但是,为什么我不能使用 symbol = (rand() % ('~' - ' ' + 1)) + ' '; 的Ascii码 ~是126 空格为32 所以symbol=(rand()%('~'-''+1))+''相当于: symbol = rand(); 这将为您提供一个介于32和126之间的随机数 C99 7.20.2.1 rand函数计算 范围从0到RAND_MAX RAND_MAX宏的值应至少为32767 如果您想要一个介于0和最小
symbol = (rand() % ('~' - ' ' + 1)) + ' ';
的Ascii码
是126~
为32空格
symbol=(rand()%('~'-''+1))+''代码>相当于:
symbol = rand();
这将为您提供一个介于32
和126
之间的随机数
C99 7.20.2.1
rand
函数计算
范围从0到RAND_MAX
RAND_MAX宏的值应至少为32767
如果您想要一个介于0和最小值(最大值(32767,rand_max)之间的范围,可以使用symbol=rand() Ascii的
~
是126
空格
为32
所以symbol=(rand()%('~'-''+1))+''代码>相当于:
symbol = rand();
这将为您提供一个介于32
和126
之间的随机数
C99 7.20.2.1
rand
函数计算
范围从0到RAND_MAX
RAND_MAX宏的值应至少为32767
如果您想要一个介于0和最小值(最大值(32767,rand_max)之间的范围,可以使用symbol=rand() 没有所谓的字符算术注释(AFAIK),这意味着它是正常的业务。你似乎对整个表情感到困惑
按照
~
的十进制值为126
的十进制值为32
rand()
的输出将在空间上按范围进行模值,以便生成一个值
要分解它
('~'-''+1)
=126-32+1
=95
(rand()%('~'-''+1))
生成一个介于0-94之间的随机数
(rand()%('~'-''+1))+'
产生一个介于32-126之间的随机数,这是可打印的范围
为什么我不能使用symbol=rand()代码>
好吧,那句话没有错,但是看起来它的目的是生成一个可打印的符号值
注:
引用第§6.4.4.4章中的C11
整数字符常量是一个包含一个或多个多字节字符的序列
在单引号中,如在“x”中。[……]
以及
整型字符常量的类型为int
。[……]
所以,一直以来都是整数运算。没有所谓的字符算术注释(AFAIK),这意味着它是正常的业务。你似乎对整个表情感到困惑
按照
~
的十进制值为126
的十进制值为32
rand()
的输出将在空间上按范围进行模值,以便生成一个值
要分解它
('~'-''+1)
=126-32+1
=95
(rand()%('~'-''+1))
生成一个介于0-94之间的随机数
(rand()%('~'-''+1))+'
产生一个介于32-126之间的随机数,这是可打印的范围
为什么我不能使用symbol=rand()代码>
好吧,那句话没有错,但是看起来它的目的是生成一个可打印的符号值
注:
引用第§6.4.4.4章中的C11
整数字符常量是一个包含一个或多个多字节字符的序列
在单引号中,如在“x”中。[……]
以及
整型字符常量的类型为int
。[……]
所以,它一直都是整数运算。C中的字符常量都是整数。因此,以下是:
symbol = (rand() % (126 - 32 + 1)) + 32;
计算'~'
的编码与'
的编码之间的偏移量,并向其中添加一个偏移量。这是它们之间有多少不同的字符编码,让我们调用这个数字m
('~' - ' ' + 1)
获取一个伪随机数并将其映射到范围[0,m)
,让我们调用该数字n
(rand() % ('~' - ' ' + 1))
这只需将n
视为偏移量,并将其添加到'
的编码中,从而获得符号的编码。符号将始终是某个集合中的一个
上述操作将把一个可能远远超出字符范围的整数转换为字符值。这将以某种实现定义的方式完成。至少可以说,这不是获得正确结果的最可靠方法。C中的字符常量是整数。因此,以下内容:
symbol = (rand() % (126 - 32 + 1)) + 32;
计算'~'
的编码与'
的编码之间的偏移量,并向其中添加一个。这是它们之间有多少不同的字符编码,让我们调用该数字m
('~' - ' ' + 1)
获取一个伪随机数并将其映射到范围[0,m)
,让我们调用该数字n
(rand() % ('~' - ' ' + 1))
这只需将n
视为偏移量,并将其添加到'
的编码中,从而获得符号的编码。符号将始终是某个集合中的一个
上面将把一个可能远远超出字符范围的整数转换成一个字符值。这将以实现定义的方式完成。这不是mos