由于C对同时包含有符号和无符号数的表达式的处理方式,出现了一些奇特的行为。当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C会隐含地将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的,来执行这个运算。
- 请看如下代码并判断输出结果:
#include"stdio.h"
int main()
{
int x=-1;
unsigned int y=1;
printf("x+y=%d\n",x+y);
if(x<0u)
{
printf("yes!\n");
}
else
{
printf("no!\n");
}
return 0;
}
- 你做对了吗?1
这种方法对于标准的算术运算(即加、减、乘、除、求幂、求余)来说并无多大差异,但对于像<和>这样的关系运算符来说,它会导致与直觉不相符的结果。
x=y=0
no! ↩︎