P53 有符号数和无符号数的比较

C语言在处理无符号数时,将有符号数强制类型转换为无符号数进行运算。

这种行为对一般的算术运算没有影响,比如

1     int a=-10;
2     unsigned b=12;
3     printf("%d
",a+b);
4     printf("%u
",a+b);

运行结果

但是对于比较运算符(>,<,==),就会产生一些问题。

比如

1     int a=-1;
2     unsigned b=1;
3     printf("%d
",a<b?1:0);

我们期望的结果是-1<0,输出为1

实际运行结果

比较过程中,有符号数-1被强制类型转换为无符号类型,在32位的机器上,ua=a+pow(2,32);所以ua>>b

2.21 答案

类型   求值

无符号   1
有符号   1
无符号        0
有符号        1
无符号        1

原文地址:https://www.cnblogs.com/CofJus/p/12130223.html