描述
??在嵌入式編程程序中,最長接觸到的就是無符號數,但也不可避免的會遇到有符號數,當有符號數與無符號數相遇時,總會發生一些“奇妙的玄學”,而這“玄學”稍有不慎就會造成無法彌補的錯誤,
??來看下面一段代碼
#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://www.uj5u.com/qita/126809.html
標籤:其他
上一篇:anyRTC無人機圖傳方案
下一篇:can電平例外
