非常教程

C参考手册

数值 | Numerics

I

在头文件<complex.h>中定义

#define I / *未指定* /

(自C99以来)

I宏扩展为_Complex_I或_Imaginary_I。 如果实现不支持虚构类型,则宏总是展开为_Complex_I。

一个程序可能未定义,也许然后重新定义宏I

注意

这个宏不是名字i,它是数学中虚构单元的名称,因为我的名字已经在许多C程序中使用过了,例如, 作为循环计数器变量。

宏 I 经常被用来形成复数,其表达式如x + y * I。 如果将I定义为_Complex_I,那么即使当y为-0.0时,这样的表达式也可以创建一个具有虚构分量+0.0的值,这对于具有分支削减的复数函数很重要。 宏CMPLX提供了精确构建复数的方法。

GCC提供了一个不可移植的扩展,允许用整数文字后缀i指定虚数常量:1.0fi,1.0i和1.0li是GNU C中的虚数单元。类似的方法是标准C ++的一部分,如C + +14(1.0if,1.0i和1.0il是C ++中的虚数单元)。

#include <stdio.h>
#include <complex.h>
 
int main(void)
{
    printf("I = %.1f%+.1fi\n", creal(I), cimag(I));
 
    double complex z1 = I * I;     // imaginary unit squared
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
 
    double complex z = 1.0 + 2.0*I; // usual way to form a complex number pre-C11
    printf("z = %.1f%+.1fi\n", creal(z), cimag(z));
}

输出:

I = 0.0+1.0i
I * I = -1.0+0.0i
z = 1.0+2.0i

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.3.1 / 6 I(p:188)
    • G.6 / 1 I(p:537)
  • C99标准(ISO / IEC 9899:1999):
    • 7.3.1 / 4 I(p:170)
    • G.6 / 1 I(p:472)

扩展内容

_Imaginary_I(C99)

虚数单位常数i(宏常数)

_Complex_I(C99)

复数单位常数i(宏常数)

CMPLXCMPLXFCMPLXL(C11)(C11)(C11)

从实部和虚部构建一个复数(函数宏)

| 运算符“”i 的C ++文档 |

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。