#include <stdio.h>
int main()
{
char c;
c=10;
if(c%2==0)
printf("Yes");
return 0;
}
上面的代码打印“是”。有人能说出为什么模数运算符适用于char
和int
但不适用于double
等吗?
答案 0 :(得分:7)
您已经获得了解释为%
定义char
的原因的注释:它是为所有整数类型定义的,而在C中,char
是整数类型。其他一些语言确实定义了不支持算术运算的不同char
类型,但C不是其中之一。
但要回答为什么没有为浮点类型定义:历史。没有技术原因可以为浮点类型定义%
运算符。以下是C99基本原理所说的内容:
6.5.5乘法运算符
[...]
C89委员会拒绝扩展
%
运营商以处理浮动类型,因为此类使用会复制fmod
提供的设施(见§7.12.10.1)。
正如mafso后来发现的那样:
7.12.10.1 fmod功能
[...]
C89委员会审议了使用余数运算符
%
进行此功能的提案;但它被拒绝是因为运营商通常对应硬件设施,并且大多数机器的硬件都不支持fmod
。
他们似乎有点矛盾。 %
运算符未被扩展,因为fmod
已经填满了这个需求,但是fmod
被选中以填补这个需求,因为委员会不想扩展%
运算符?它们不可能同时成为现实。
我怀疑其中一个原因是原因,另一个原因是之后没有重新访问该决定,但是没有人知道哪个是第一个。无论哪种方式,只是决定%
不会执行此操作。