有符号数和无符号数条件判断时的坑
程序员文章站
2022-03-11 11:11:17
描述 在嵌入式编程过程中,最长接触到的就是无符号数,但也不可避免的会遇到有符号数,当有符号数与无符号数相遇时,总会发生一些“奇妙的玄学”。而这“玄学”稍有不慎就会造成无法弥补的错误。 来看下面一段代码#include 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就会变成一个极大的无符号整数,所以造成了逻辑判断上的错误。
当然,如果直接取两者的运算结果的话,结果还是正确的。
所以,当进行条件判断时,一定要注意条件运算符两端的数值的数据类型,以免造成判断上导致的流程错误,这错误可能是致命的。
本文地址:https://blog.csdn.net/m0_38127906/article/details/108768751
上一篇: 元旦节应该吃些什么
下一篇: AE怎么制作科技感十足的动感线条效果?
推荐阅读