我想知道以下代码输出的原因是什么:
unsigned short a=10,aa=-1;
if(a>-1)
printf("surprise");
else
printf(" No surprise");
这给出了输出“惊喜”
unsigned int a=10,aa=-1;
if(a>-1)
printf("surprise");
else
printf("No surprise");
这给出了输出“No Surprise”
and
unsigned short a=10,aa=-1;
if(a>aa)
printf("surprise");
else
printf("No surprise");
这给出了输出“No Surprise”
请参阅此堆栈交换问题:
在存在 unsigned int 和signed int 的 C 表达式中,哪种类型将提升为哪种类型?
在AProgrammer的回复中,列出了完整的规则。
在第一种情况下,适用第四条规则(-1是有符号整数,它可以表示无符号短整型的所有值,因此无符号短整型被提升为有符号整型)。
在第二种情况下,适用第三条规则(有符号整数不能代表无符号整数的所有值,因此将其更改为无符号整数)。
在第三种情况下,-1 被转换为无符号短整型,然后应用第一个规则。
一般来说,我喜欢在进行任何比较之前将所有变量转换为相同的有符号类型(足够大以容纳我期望的范围),以避免混淆。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)