有符號數和無符號數條件判斷時的坑

2021-10-09 17:59:20 字數 509 閱讀 6211

在嵌入式程式設計過程中,最長接觸到的就是無符號數,但也不可避免的會遇到有符號數,當有符號數與無符號數相遇時,總會發生一些「奇妙的玄學」。而這「玄學」稍有不慎就會造成無法彌補的錯誤。

來看下面一段**

#include

void

main

(void

)else

}

這段**輸出的結果會是什麼呢???

有點意思,5居然不大於-5,是編譯器傻了嗎?不,這是因為,當有符號數與無符號數進行條件判斷時,編譯器會自動將有符號數隱式轉化為無符號數,這時,-5就會變成乙個極大的無符號整數,所以造成了邏輯判斷上的錯誤。

當然,如果直接取兩者的運算結果的話,結果還是正確的。

所以,當進行條件判斷時,一定要注意條件運算子兩端的數值的資料型別,以免造成判斷上導致的流程錯誤,這錯誤可能是致命的。

有符號數和無符號數

有符號和無符號整數 1.通常情況下,大多數字預設的是有符號數,比如 4,5 要想寫乙個無符號數必須在後面加u 比如 4u,5u 2.在計算機中有符號數是用補碼的形式來表示的,最高位是符號位。無符號數就是正數唄 正數的補碼和原碼相同。比如 1 在計算機中表示為 11111111 11111111 11...

無符號數和有符號數

人有十個手指頭,習慣了逢十進一,於是十進位製成了生活中的標準。程式的世界只有高低電平兩種狀態,更適合用二進位制來表示,於是二進位製成了程式世界的標準。對與無符號數來說,我們更喜歡談他們之間的轉化,十進位制是我們最習慣的進製,於是十進位制轉為r進製,r進製轉為十進位制變尤為重要。十進位制 r進製 整數...

有符號數和無符號數

刷題刷到了有符號數的問題,回顧一下知識點 有符號數 signed 可以區分正負數 最高位表示數值的正負 0表示正數,1表示負數 無符號數 unsigned 不區分正負數 只有整數型別 雖然無符號數所能表示的最大數值大於有符號數,但兩者所能表示的數值範圍相同。eg.short int 128,0 0,...