有符号数和无符号数条件判断时的坑

   日期:2020-09-25     浏览:77    评论:0    
核心提示:描述  在嵌入式编程过程中,最长接触到的就是无符号数,但也不可避免的会遇到有符号数,当有符号数与无符号数相遇时,总会发生一些“奇妙的玄学”。而这“玄学”稍有不慎就会造成无法弥补的错误。  来看下面一段代码#include <stdio.h>void main(void){ unsigned int a = 5; int b = -5; if (a > b) { printf("a大于b\r\n"); } else { printf("a不大于b\r\n");

描述

  在嵌入式编程过程中,最长接触到的就是无符号数,但也不可避免的会遇到有符号数,当有符号数与无符号数相遇时,总会发生一些“奇妙的玄学”。而这“玄学”稍有不慎就会造成无法弥补的错误。
  来看下面一段代码

#include <stdio.h>
void main(void)
{ 
	unsigned int a = 5;
	int b = -5;
	if (a > b)
	{ 
		printf("a大于b\r\n");
	}
	else
	{ 
		printf("a不大于b\r\n");
	}
}

  这段代码输出的结果会是什么呢???

有点意思,5居然不大于-5,是编译器傻了吗?不,这是因为,当有符号数与无符号数进行条件判断时,编译器会自动将有符号数隐式转化为无符号数,这时,-5就会变成一个极大的无符号整数,所以造成了逻辑判断上的错误。
当然,如果直接取两者的运算结果的话,结果还是正确的。
所以,当进行条件判断时,一定要注意条件运算符两端的数值的数据类型,以免造成判断上导致的流程错误,这错误可能是致命的。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服