其中哪些是数据类型升级和降级:
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;
也降级..请帮助:)
答案 0 :(得分:9)
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 (平衡)。
fl + 2 * ch
的结果是 float 类型。浮动降级到 int (在分配期间转换为左操作符)。这是一个危险的转换,因为精度损失,一个好的编译器应该发出一个警告,试图在没有显式转换的情况下将一个浮点数存储在一个int中。
fl = 2.0 * ch + i;
变量ch的类型为 char ,首先提升以输入 int (整数促销),然后提升输入 double (平衡)。
2.0 * ch
的结果类型为 double 。
2.0 * ch + i
的结果类型为 double ,降级以输入 float (在分配期间转换为左侧运算符)
ch = 5212205.17;
文字5212205.17的类型为 double ,降级为 char (在分配期间转换为左侧运算符)。这是一个危险的转换,也可能是未定义的行为,因为char的签名是实现定义的,而且数字也不适合char。
尝试将带符号的浮点数存储在无法表示它的类型中(例如unsigned int)是未定义的行为,即严重错误。
答案 1 :(得分:1)
我从来没有听说过C编程中的“数据类型降级”这样的概念。
“促销”通常用于表示将“小”类型转换为更大类型的事实,该类型在编译程序的平台上是原生的。
例如,在x86上,gcc会将8位字符提升为32位整数,因为x86处理器的ALU对整数的32位字起作用。
回到你的问题,要么是关于隐式类型转换,要么是我们错过了一些上下文,以便能够说出哪个变量将被提升。
免责声明:看起来您可能正在准备考试,在这种情况下,您应该坚持您的老师的惯例。也许他正在调用一个整数或浮点类型的隐式转换,分别是一个更大的整数浮点类型一个提升,将小数部分截断为降级,或者整数溢出也作为降级。
答案 2 :(得分:0)
在ch = ch+1;
这里1是一个整数,所以ch
被提升为整数并加1,然后结果被降级为字符并存储在ch中。