C語言的問題 之 有符號數和無符號數的計算
參與計算的兩個變量,類型不同,則需要先轉換成同一類型.
然后進行計算

?轉換的時候,為了保證精度不降低,需要向數據增長的方向進行轉換.
比如stm32單片機中 char :8位? int:32位? long long:64位
這里會存在bug: 在轉換的時候C語言只考慮了長度,沒有考慮到符號位.
比如,int->unsigned 轉換的時候.
圖片來源:https://blog.csdn.net/qq_47406941/article/details/112707018


所有浮點運算都以雙精度精心計算.即如果是兩個float,那么計算的時候也是先轉換成double
再進行計算.

有"不符合人性"的情況:
如果兩個數據,一個有符號,一個無符號,則轉換成無符號.
那么有人會說這樣不就錯了嗎?的確,在C語言中就是會輸出錯誤的結果...

還有個"不符合人性"的情況:
char,short,unsigned char ,nusigned short 類型,
也就是比int短的類型,在進行運算的時候,必須轉換成int型.
這里 char 轉換成int 要進行位的擴展,這個時候就會出問題:

這樣就可能會有多補了好幾個1的情況:



還有"精度損失"的情況
在賦值運算的時候,兩邊數據不同類型.
賦值號右邊的類型將轉換為左邊的類型.
a=b? 如果a是int類型,b是float類型.
b=1.78然后賦值給a,那么a只保留整數部分...C語言,連四舍五入都不計算的...

http://bbs.itheima.com/thread-4473-1-1.html
還有移位的東西:


標簽: