double ←── float 高
↑long
↑unsigned
↑int ←── char,short 低
1.如乙個int 型資料與乙個unsigned型資料一起運算,需要先將int型資料轉換為unsigned型, 然後兩者再進行運算,結果為unsigned型。所有這些轉換都是由系統自動轉換
2.乙個大於0x80的char型,由於最高位代表符號位,於是資料在實際上是顯示為補碼形式的 0xffffff80。
也就是 0x80 取反 +1 後的值。
例如,linux dts of_property_read_u32讀取到的資料為int型。
如果這些資料要寫入暫存器的時候,例如 static void spi_send_cmds(struct sprd_spi *spi, int8_t *data, uint16_t len)
將寫進去的資料仍是 有符號位的整型。實際上應該型別轉換成無符號資料
舉個例子
1 #include 2
3 int main()
4 ffffffe2 ffffffe2 ffffff80
e2 e2 80
上面說明了,當char大於0x80時,最高位實際上是符號位,則顯示的是 ffffff80 補碼。
這樣實際上對資料處理是存在問題的。
也就是說,一般情況下,需要注意資料型別,盡量是無符號數
隱式型別轉換
c 本身對內建型別定義了各種隱式的型別轉換,這種內建的型別轉換在可能導致精度 丟失的情況下編譯器會發出警告,但當我們定義自己的型別時,提供各種隱式轉換往往 是弊大於利的 至少在我編寫過的 中很少用到 隱式的型別轉換可分為 其它型別到本型別,本型別到其它型別兩種.第一種通過單變數 可呼叫之建構函式進行...
隱式型別轉換
c語言中有以下四種情況會進行隱式轉換 1 算術運算子中,低型別轉換為高型別。2 賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值。3 函式呼叫傳遞引數時,系統將實參轉換為形參的型別後,賦給形參。4 函式有返回值是,系統將表達值型別轉換為返回值型別。進行算術運算時,不同型別的數必須轉換...
隱式型別轉換
1.c的整型算數運算總是至少以預設型型別的精度來進行的。為了獲得這個精度,表示式的字元和短整型運算元在使用之前被轉換為普通整型,這種轉換叫 整型提公升 下面我們來看個例子 char a 2 char b 127 char c a b 求c 多少?首先char為1個位元組 而且是有符號的 char最大...