在用keil5时,为啥uint16_t与常数比较总为假啊,也没超范围啊

img


在用keil5时,为啥uint16_t与常数比较总为假啊,也没超范围啊

有符号的和无符号的相比,会将有符号的数的符号位当作数据位处理
比如,
unsigned int a = 10;
int b = -4;
if(a > b)
printf("1");
else if(b > a)
printf("2");
//输出结果是 2,b比a大
原因就在于
编译器将 b 的符号位(最高位) 1(表示负数) 当作数据位处理了