什么是不可或缺的推广和平衡之间的差异。 我们可以这样说,任何类型转换为ATLEAST INT或执行任何操作之前unsigned int的类型(除逻辑运算符&&,||!)总结了两个规则,一个更大的类型,如果任何操作数的类型是更大的比INT?
Answer 1:
有标准两个不同的东西,但没有叫平衡:
如果
int
可以表示原始类型的所有值(如由宽度的限制,对于一个位字段),该值被转换为int
; 否则,它被转换为一个unsigned int
。 这些被称为整数促销 0.58)所有其它类型由整数提升不会改变。
....
6.3.1.8常见的算术转换许多运营商意想不到算术类型转换的原因和产量结果类型的操作数以类似的方式。 其目的是确定操作数和结果共同的真正类型。
对于应用到不同类型的运营商的表达的总体思路,是,操作数被转换成其中存在精度损失较少的类型。 例如,如果a
是float
和b
是双,对于总和a + b
a
被转换成double
的添加之前。 类似,如果c
是unsigned long
它首先被转换为double
为c + b
。
Answer 2:
“积分促销”是老C90来看,正式的标准术语整数促销 。
整数促销是每当一个小的整数类型(布尔,焦炭,短和它们的签名的等同物)被用作在一个表达式的操作数适用的规则。
C11 6.3.1.1/4
如果int可以表示原始类型的所有值(如由宽度的限制,对于一个位字段),该值被转换为int; 否则,它被转换为一个unsigned int。 这些被称为整数促销。 所有其它类型在整数提升不会改变。
“平衡”是非正式用语,指一组已知为通常的算术转换规则。 他们指出如何在操作中的每个操作数的所有隐式类型的促销活动来完成。 请注意,整数促销是通常的算术转换的一部分:
C11 6.3.1.8
首先,如果对应的实数型有一个操作数的长double,则另一个操作数转换,而不型结构域的变化,以一类型,其相应的实际类型是长一倍。
否则,如果对应的真实类型任一操作数的两倍时,另一个操作数转换,而不型结构域的变化,以一类型,其相应的实际类型是双。
否则,如果对应的真实类型有一个操作数的是浮动时,另一个操作数转换,而不型结构域的变化,以一类型,其相应的实际类型是浮点数。
否则,整促销活动是在两个操作数执行。 然后下面的规则应用到推动操作数:
如果两个操作数具有相同的类型,则不需要进一步的转换。
否则,如果两个操作数已签署整数类型或两者都具有的无符号整数类型,具有较小整数转换等级的类型的操作数转换为操作数的具有更大的秩的类型。
否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数的类型的秩,然后用带符号的整数类型的操作数被转换成无符号整数类型的操作数的类型。
否则,如果用符号整型操作数的类型,可以表示所有与无符号整数类型的操作数的类型的值的,然后用无符号整数类型的操作数被转换成符号整型操作数的类型。
否则,两个操作数被转换为对应于与符号整型操作数的类型的无符号整数类型。