以下哪项是数据类型升级和降级:
- 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;
如果我说的话我是否正确
促销:
i = fl + 2 * ch;
fl = 2 * ch + i;
降级:
- ch = 5211205.17;
不知道
- ch = ch + 1;
也降级..请帮忙:)
解决方法
- char ch = 'C';
文字“C”的类型为int,降级为char类型(在赋值期间转换为左侧运算符).
- float fl = 2.2;
文字2.2是double类型,降级为float类型(在赋值期间转换为左操作符).
- ch = ch + 1;
变量ch的类型为char,并提升为int类型(整数提升).
加法ch 1的结果是int类型并降级为char类型(在赋值期间转换为左运算符).
- i = fl + 2 * ch;
变量ch的类型为char,并提升为int类型(整数提升).
2 * ch的结果是int类型,并提升为float(balance)类型.
fl 2 * ch的结果是float类型.浮点数降级为int(在赋值期间转换为左运算符).这是一个危险的转换,因为精度损失,良好的编译器应该发出警告,试图在没有显式转换的情况下将浮点数存储在int中.
- fl = 2.0 * ch + i;
变量ch的类型为char,首先提升为int类型(整数提升),然后提升为double类型(balance).
2.0 * ch的结果是double类型.
2.0 * ch i的结果是double类型并降级为float类型(在赋值期间转换为左运算符).
- ch = 5212205.17;
文字5212205.17是double类型并降级为char类型(在赋值期间转换为左操作符).这是一个危险的转换,也可能是未定义的行为,因为char的签名是实现定义的,并且数字也不适合char.
尝试将带符号的浮点数存储在无法表示它的类型(例如unsigned int)中是未定义的行为,即严重的错误.