将实数转换为复数是否会将C中的虚部设置为0?以下是我正在try 做的事情:

#include <complex.h>
#include <stdio.h>

int main(void){

    float complex a;
    double b = 1.0;

    a = (float complex) b ; /* Does this convert to float and set 
                            complex part of a to 0 (according to C standards) ?*/

    a = (float) b ; /* If we also do this, does the compiler set the imaginary part to 0? 
             or we have to explicitly give b + 0.0f*I ?*/

    printf("%f \n", cimagf(a));
    return 0;
}

更具体地说,它是否保留虚数部分未初始化(因为复数表示为两个实数)?

推荐答案

是的,虚数部分设置为0.引用C17标准(草案)第6.3.1.7节:

当实数类型的值转换为复数类型时,复数的实数部分 结果值由转换为对应的实数类型的规则确定 复数结果值的虚部是正零或无符号零.

C++相关问答推荐

无效使用未定义类型'structsquare'?

如何将不同长度的位转换成字节数组?

来自stdarg.h的c中的va_args无法正常工作<>

当打印字符串时,为什么在c中没有使用常量限定符时我会收到警告?

两个连续的语句是否按顺序排列?

非常大的数组的大小

使用错误的命令执行程序

C中的FREE函数正在触发断点

如何使用_newindex数组我总是得到错误的参数

如何使用C++在控制台中以彩色打印被阻止的客户端

处理EPOLL_WAIT中的接收数据和连接关闭信号

是否定义了此函数的行为?

OSDev--双缓冲重启系统

从不兼容的指针类型返回&&警告,但我看不出原因

即使我在C++中空闲,也肯定会丢失内存

浮点正零何时不全为零?

如何在Rust中处理C的longjmp情况?

std::malloc/calloc/realloc/free 与纯 C 的 malloc/calloc/realloc/free 有什么不同

使用 GCC 将一个函数中初始化的 struct 体实例通过指针传递到 C 中的另一个函数会产生不同的结果

段错误try 访问静态字符串,但仅有时取决于构建环境