代码如下:
#include <stdio.h>
int main(int argc, char *argv[]){
signed short signed_short = -1;
unsigned short unsigned_short = 0;
signed int signed_int = -1;
unsigned int unsigned_int = 0;
/* Integral promotion rules promote to types 'int' and 'int'; Usual
arithmetic rules don't need to do anything because types are the same.
*/
if(signed_short < unsigned_short){
printf("%hd < %hu\n", signed_short, unsigned_short);
}else{
printf("%hd > %hu\n", signed_short, unsigned_short);
}
if(signed_int < unsigned_int){
printf("%d < %u\n", signed_int, unsigned_int);
}else{
printf("%d > %u\n", signed_int, unsigned_int);
}
return 0;
}
输出:
-1 < 0
-1 > 0
我想了解 C 中 Integer 提升的整个过程,这导致了导致结果的 signed int 、 unsignd int 与 short 和 unsigned_short 行为之间的差异。