C中的数据类型提升或降级

Mat*_*t_p 7 c types

以下哪项是数据类型升级和降级:

char ch = 'C';
int i = 65;
float fl = 2.2;

ch = ch + 1;
i = fl + 2 * ch;
fl = 2.0 * ch + i;
ch = 5212205.17;
Run Code Online (Sandbox Code Playgroud)

如果我说的话我是否正确

促销:

  • i = fl + 2 * ch;

  • fl = 2 * ch + i;

降级:

  ch = 5211205.17;
Run Code Online (Sandbox Code Playgroud)

不知道

  ch = ch + 1;
Run Code Online (Sandbox Code Playgroud)

也降级..请帮忙:)

Lun*_*din 9

char ch = 'C'; 
Run Code Online (Sandbox Code Playgroud)

文字'C'int类型并降级char类型(在赋值期间转换为左操作符).

float fl = 2.2;
Run Code Online (Sandbox Code Playgroud)

文字2.2double类型并降级float类型(在赋值期间转换为左操作符).

ch = ch + 1;
Run Code Online (Sandbox Code Playgroud)

变量ch的类型为char,提升int类型(整数提升).

添加的结果ch + 1int类型并降级char类型(在赋值期间转换为left运算符).

i = fl + 2 * ch;
Run Code Online (Sandbox Code Playgroud)

变量ch的类型为char,提升int类型(整数提升).

结果2 * chint类型并提升float(balance)类型.

结果fl + 2 * chfloat类型.浮点数降级int(在赋值期间转换为左运算符).这是一个危险的转换,因为精度损失,良好的编译器应该发出警告,试图在没有显式转换的情况下将浮点数存储在int中.

fl = 2.0 * ch + i;
Run Code Online (Sandbox Code Playgroud)

变量ch的类型为char,首先提升int类型(整数提升),然后提升double类型(balance).

结果2.0 * chdouble类型.

结果为double2.0 * ch + i类型并降级float类型(在赋值期间转换为left运算符).

ch = 5212205.17;
Run Code Online (Sandbox Code Playgroud)

文字5212205.17是double类型并降级char类型(在赋值期间转换为左操作符).这是一个危险的转换,也可能是未定义的行为,因为char的签名是实现定义的,并且数字也不适合char.

尝试将已签名的浮点数存储在无法表示它的类型(例如unsigned int)中是未定义的行为,即严重的错误.