如何在 C 中实现复杂的算术运算符?

How are complex arithmetic operators implemented in C?

ANSI C 标准似乎并未明确指定有关 API 的复杂算术运算符(+、-、*、/)的任何细节,尽管该实现似乎允许使用这些原语.我想知道这怎么可能,因为 C 没有实现运算符重载的概念?我的想法是,指定 complex 类型的宏的实现很可能会使用 确实 允许此类操作的内置类型,但我想知道复数如何可以允许与例如单个浮点数相同的值范围(因为它必须以某种方式表示为一对,我认为它的范围会减半)?

我的思路是正确的,还是偏离了这个方向?

由于 C99 复杂类型是 C 语言的可选部分,包括对所有算术运算的支持。

为了回答您关于表示的问题,它们被定义为成对的实部和虚部,正如人们所期望的那样。

您对 "ANSI C" 之类的引用没有明确定义,因为所有 ISO C 标准通常也会被 ANSI 采用。因此,通过发布年份 C89、C99 和 C11 更容易引用 C 的不同版本。

C 是否有运算符重载——甚至在 C89 标准之前,它就重载了像 +-* 这样的运算符,和 / 用于整数和浮点运算。

C 没有用户定义的 运算符重载——因此只有标准中定义的固定重载集,无法扩展它们。

C99 只是将运算符的 int/float 重载扩展到复数。程序仍然无法将重载扩展到规范中指定的范围之外。