是否可以在 C99 复数浮点数的虚部存储负零?
我应该如何用带符号的虚部静态初始化复杂的常量?
我有一个小例子,但我不明白,为什么a
和c
相同以及为什么-std=c99
会改变结果。
$ cat zero1.c
int main() {
float _Complex a;a = 0.0 + (__extension__ 0.0iF);
float _Complex b;b = 0.0 + (__extension__ -0.0iF);
float _Complex c;c = -0.0 + (__extension__ 0.0iF);
float _Complex d;d = -0.0 + (__extension__ -0.0iF);
printf("a= 0x%016llx\n", *(long long*)(&a));
printf("b= 0x%016llx\n", *(long long*)(&b));
printf("c= 0x%016llx\n", *(long long*)(&c));
printf("d= 0x%016llx\n", *(long long*)(&d));
}
$ gcc-4.5.2 -w -std=c99 zero1.c ; ./a.out
a= 0x0000000000000000
b= 0x0000000000000000
c= 0x0000000000000000
d= 0x0000000080000000
$ gcc-4.5.2 -w zero1.c ; ./a.out
a= 0x0000000000000000
b= 0x8000000000000000
c= 0x0000000000000000
d= 0x8000000080000000
欢迎引用 C99-TC3 和 gcc 手册。
我在 C99 (n1256.pdf) 和http://www.knosof.co.uk/cbook/中找不到任何相关内容