【发布时间】:2014-09-12 14:59:21
【问题描述】:
当我将相同的值分配给有符号和无符号 short 并进行比较时,它会失败,但它适用于 int。除非我使用其中一种来使它们具有相同的类型,否则比较是行不通的。
#include<stdio.h>
int main()
{
signed short b = -10;
unsigned short c=-10;
signed int a = -10;
unsigned int d=-10;
printf("%d , %d\n",b,(unsigned short)b);
printf("%d , %d\n",(signed short)c,c);
printf("%d , %u\n",a,(unsigned int)a);
printf("%d , %u\n",(signed int )d,d);
printf("b==c %d\n", b==c);
printf("a==d %d\n", a==d);
return 0;
}
输出:
./a.out
-10 , 65526
-10 , 65526
-10 , 4294967286
-10 , 4294967286
b==c 0
a==d 1
我在 sun solaris sparc 和 hpux itanium 中以相同的输出运行它。 (64 位 exe)
【问题讨论】:
-
你为什么要把苹果和橘子比较?
-
这可能是重复的,但不是那个问题。虽然两者都与整数提升有关,但这一项涉及扩大转换。