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

时间:2014-01-23 11:57:39

标签: 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;

如果我说的话我是否正确:

促销:

  
      
  • i = fl + 2 * ch;

  •   
  • fl = 2 * ch + i;

  •   
降级:

  ch = 5211205.17;

不确定是否

  ch = ch + 1;

也降级..请帮助:)

3 个答案:

答案 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中。