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

1 c floating-point operators modulus

#include <stdio.h>

int main()
{
  char c;
  c=10;
  if(c%2==0)
    printf("Yes");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码打印"是".谁能告诉为什么模运算符适用于charint而不是double等?

小智 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被选中以满足这种需求%?它们不可能同时真实.

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