在C语言中将实数强制转换为复数时,虚部会被设为0吗?
C语言实数转复数的虚部初始化规则
针对你代码里的两个场景,按C标准的规定明确如下:
1. (float complex) b 的强制转换
当把实数类型转换为复数类型时,转换结果的实部是该实数转换为复数对应实部类型的值,虚部被自动初始化为0。这里b是double类型,转换为float complex后,实部是(float)b,虚部为0.0f,不会处于未初始化状态。
2. a = (float)b 的赋值操作
当把实数类型的值赋值给复数变量时,等价于先将该实数转换为对应的复数类型(虚部设为0)再赋值。所以这里(float)b是float类型,赋值给float complex的a时,虚部会被自动设为0.0f,不需要显式写成b + 0.0f*I。
简单来说,这两种操作都会完整初始化复数的实部和虚部,虚部不会留为未定义状态。
测试代码(附注释)
#include <complex.h> #include <stdio.h> int main(void){ float complex a; double b = 1.0; a = (float complex) b ; /* 实部转为float,虚部自动设为0 */ a = (float) b ; /* 赋值时自动转为float complex,虚部设为0 */ printf("%f\n", cimagf(a)); // 运行后输出0.000000 return 0; }
内容的提问来源于stack exchange,提问作者Aditya Kurrodu
相关产品推荐
相关产品推荐

