假设我有以下情景:
int i = 10;
short s = 5;
if (s == i){
do stuff...
} else if (s < i) {
do stuff...
}
在C语言中进行比较时,它会将较小的数据类型(在这种情况下是short)转换为较大的数据类型(int),还是将右侧的数据类型转换为左侧的数据类型(short)?
假设我有以下情景:
int i = 10;
short s = 5;
if (s == i){
do stuff...
} else if (s < i) {
do stuff...
}
在C语言中进行比较时,它会将较小的数据类型(在这种情况下是short)转换为较大的数据类型(int),还是将右侧的数据类型转换为左侧的数据类型(short)?
来自类型转换页面:
第44页的隐式转换集,虽然没有正式说明,但现在要记住这些就足够了。如果您注意到作者所说的“较低”的类型被提升为“较高”的类型,那么它们很容易记忆,其中类型的“顺序”是
char < short int < int < long int < float < double < long double
这个规则很容易记住——“低到高”——但是对于有符号和无符号整数类型来说,它并没有太多帮助,Oli的文章中对此进行了详细解释。但它很容易记住,并在大多数情况下对你有所帮助。
unsigned
如何适用?-1
是否小于 2U
? - pmg<=
,在C99中还有long long int
,这会增加混淆的程度 :) - pmg通常情况下,C语言只会比较相同类型的两个值,并且永远不会将变量隐式转换为精度更低的类型。在您的示例代码中,short
被提升为int
,这相当于写成:
int i = 10;
short s = 5;
if ((int)s == i){
do stuff...
} else if ((int)s < i) {
do stuff...
}
这将会完全按照你的期望执行,但是对于有符号/无符号比较来说情况并非如此。
short
类型会被提升为int
类型。 - Frédéric Hamidi