对于双x变量,x = 0和x = 0.0之间的任何差异? c代码

时间:2014-06-19 11:10:01

标签: c double

之间有什么区别吗?
double x;
x=0;

double x;
x=0.0;

可能是一个愚蠢的问题,但我无法在任何地方找到答案

3 个答案:

答案 0 :(得分:3)

是。在x = 0中,执行隐式类型宣传以将0int}转换为double 0.0

答案 1 :(得分:3)

在实践中,虽然0int,但第一种情况下存在隐式转换,因此不必有任何区别。

我试过了(在assembly.ynh.io上)。这个C代码:

#include <stdio.h>

int main(void)
{
  double x, y;

  x = 0;
  y = 0.;

  printf("x=%g and y=%g\n", x, y);

  return 0;
}

为两个作业生成以下程序集(xy):

0008 B8000000 00  movl  $0, %eax
000d 488945F0     movq  %rax, -16(%rbp)
0011 B8000000 00  movl  $0, %eax
0016 488945F8     movq  %rax, -8(%rbp)

换句话说,代码完全相同。这是由GCC建造的,没有优化。

我想这可以利用在两种情况下位图都为零的事实。

答案 2 :(得分:2)

我猜你的代码输出没有任何区别,如果使用完全相同,但是x=0编译器必须从int(0)执行0的隐式类型转换到double(0.0)。最坏的情况,可能会将编译时间增加几纳秒?