1

-6i这段代码中的含义是什么?

#include<stdio.h>

int main()
{
    int i = 1234;
    printf("%d",-6i);
}
4

2 回答 2

4

要回答您的真正问题,-6i是一个复杂的常量(GCC 扩展)。来自http://gcc.gnu.org/onlinedocs/gcc/Complex.html

要编写具有复杂数据类型的常量,请使用后缀“i”或“j”(任何一个;它们是等效的)。例如,2.5fi有类型_Complex float3i有类型_Complex int。这样的常数总是有一个纯虚数,但你可以通过在一个实数常数上加一来形成任何你喜欢的复数值。这是一个 GNU 扩展;如果您有一个符合 ISO C99 的 C 库(例如 GNU libc),并且想要构建复杂的浮点类型常量,您应该包含<complex.h>并使用宏I_Complex_I代替。

因此iin-6i与变量无关i,就像f浮点常量中的 in-1.0f与名为 的变量无关f

附带说明,printf("%d",-6i);是未定义的行为,因为格式规范%d不处理复杂的参数。GCC 没有对复杂类型的表示做出任何承诺(据我所知)。printf()关于那会做什么,你不能说太多。

我认为要打印复杂值,您必须分别提取复杂值的每个组件(我认为 glibc 没有printf()处理 GCC 复杂类型的格式规范扩展)。就像是:

printf("%d %d\n",__real__ -6i, __imag__ -6i);
printf("%f %f\n",__real__ -6.i, __imag__ -6.i);
于 2012-11-29T18:26:33.930 回答
1

也许如果你稍微改变你的代码:

int main(){
   int i = 1234;
   printf("%d",-6*i); 
   }

你可能会-7404回来。

要回答第二个问题,请检查这个问题

于 2012-11-29T18:22:25.750 回答