为什么模数(%)运算符适用于char而不适用于浮点类型?

时间:2014-08-16 13:11:42

标签: c floating-point operators modulus

#include <stdio.h>

int main()
{
  char c;
  c=10;
  if(c%2==0)
    printf("Yes");
  return 0;
}

上面的代码打印“是”。有人能说出为什么模数运算符适用于charint但不适用于double等吗?

1 个答案:

答案 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被选中以填补这个需求,因为委员会不想扩展%运算符?它们不可能同时成为现实。

我怀疑其中一个原因是原因,另一个原因是之后没有重新访问该决定,但是没有人知道哪个是第一个。无论哪种方式,只是决定%不会执行此操作。