C语言无符号与有符号之间的比较

水深无声 2022-09-01 08:58 413阅读 0赞
  1. #include <stdio.h>
  2. int main(void) {
  3. unsigned int a = 2;
  4. int b = -3;
  5. int c = (a > b)? 11:22;
  6. printf("%d\n", c);
  7. return 0;
  8. }

运行结果:

22

当表达式中同时存在有符号类型和无符号类型时,所有的操作数都自动转换为无符号类型。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。

遇到有符号类型和无符号类型需要比较时,要注意符号的影响,如果想带上符号比较就需要将无符号的一方强转为有符号的类型。如下所示:

  1. #include <stdio.h>
  2. int main(void) {
  3. unsigned int a = 2;
  4. int b = -3;
  5. int c = ((int)a > b)? 11:22;
  6. printf("%d\n", c);
  7. return 0;
  8. }

运行结果:

11

这种情况下将a强转为int类型。因为相同int类型下的比较,是带符号的比较。

发表评论

表情:
评论列表 (有 0 条评论,413人围观)

还没有评论,来说两句吧...

相关阅读