void fun(){
signed int a=-5;
unsigned int b=-5;
printf("the value of b is %u\n",b);
if(a==b)
printf("same\n");
else
printf("diff");
}
它打印出:
4294967291
同样的值
在第二行中,有符号值被转换为无符号值。因此,b的值为UINTMAX + 1-5 = 4294967291。
我的问题是比较运算中发生了什么。
1)a是否再次转换为无符号值并与b进行比较?
2)b(即无符号值)是否会自动转换为有符号值并进行比较?
3)由于int溢出,从无符号值到有符号值的转换是否未定义?
我已经阅读了其他关于这个主题的帖子。我只想澄清问题2和3。