#include <stdio.h>
char getChar(int x, int y)
{
char c;
unsigned int a = x;
(a + y > 10)? (c = 1): (c = 2);
return c;
}
int main(void)
{
char c1 = getChar(7,4);
char c2 = getChar(7,3);
char c3 = getChar(7,-7);
char c4 = getChar(7,-8);
printf("c1 = %d\n", c1);
printf("c2 = %d\n", c2);
printf("c3 = %d\n", c3);
printf("c4 = %d\n", c4);
return 0;
}
首先说明一下 getChar() 函数的作用。 getChar() 有两个输入参数,分别是整型的 x 和 y。在函数体内,把参数 x 的值转换为无符号整型后再与 y 相加,其结果与 10 进行比较,如果大于 10 则返回 1,否则返回 2。
完整4组重新演算
-
getChar(7,4) : 7+4=11>10 → c1=1
-
getChar(7,3) : 7+3=10 ,不大于10 → c2=2
-
getChar(7,-7) : 7 + (-7) 无符号加法溢出,结果=0 → 0>10不成立 → c3=2
-
getChar(7,-8) : 7 + (-8) 无符号加法,结果=0xFFFFFFFF → 大于10 → c4=1
输出:
c1 = 1
c2 = 2
c3 = 2
c4 = 1
一句话总结:
有符号int和无符号unsigned int混合运算/比较,int会转为unsigned;负数转为无符号后会变成巨大正数,判断逻辑完全反转。