C語言基礎資料型別的隱式轉換 截斷和解析問題

2021-09-11 16:22:58 字數 1694 閱讀 3259

隱式轉換發生在不同的資料型別之間的運算。之所以有隱式轉換,是為了確保資料的準確性。為什麼不往最高端的資料型別上轉呢?是為了節省資源和時間。

如下規則:

char ——> short——>int——>long——>long long,float——>double。這樣的排序應該是為了相容性排出來的。因為在8位、16位晶元裡,int和short都是2個位元組,long是4個位元組。但在32位、64位里,short是2個位元組,int是4個位元組,long是4個位元組。

float f = 1234567890;

float f2 = 1234567936;//為了和f做個數值比較,也就是1234567890轉成float的時候的實際值。

資料截斷是發生在多位元組的資料型別賦值給少位元組的,如int賦值給char,double賦值給float,浮點的賦值給整型的。資料截斷會導致二進位制資料丟失,可能造成資料精度丟失,甚至資料錯亂。

整型的截斷很簡單,就是把多餘的高位去掉。

int i = -1111;//十六進製制為0xfffffba9

char c = i;//賦值後c的十六進製制就是0xa9

unsigned char uc = i;//uc也是0xa9

printf("%d, %d", c, uc);//由於c和uc是signed和unsigned型別,所以%d輸出的時候分別是-87和169。這樣明顯的資料錯亂了

system("pause");

return 0;

浮點型的就要考慮被賦值的型別的最大值的範圍了,double到float,如果double的十進位制數的位數超出了float的範圍,那就造成了資料精度的丟失。浮點型到整型就可以理解成,丟掉浮點型的小數點後面的資料得到乙個整數,然後這整數再複製到整型裡面,浮點型到整型肯定會造成資料精度的丟失的,因為小數已經沒了,而且如果整數部分超出整型的最大範圍,那就資料錯亂了。

下面主要講整型和字串(%s)的解析方式。至於浮點型的可以自行查閱相關浮點數的儲存方式,csdn播客上也有很多這種的,然後按照整型的方式去做。

C語言資料型別隱式轉換

資料型別等級 位元組長度 char short賦值語句導致的型別改變 在賦值語句中,右邊的值或表示式在賦值給左邊的變數之前,先對右邊的值或表示式進行計算,然後對值的資料型別轉化為左邊變數的資料型別,左邊是什麼型別,右邊就要轉換成什麼資料型別,可能會導致其型別公升級,也可能會導致降級 c語言的資料型別...

C語言資料型別隱式轉換規則

c語言裡有各種資料型別,包含char,uchar,short,ushort,int,uint,long,ulong,float,double。每種數值型別能表達的值的範圍是不同的,而c c 的編譯器又允許這幾種型別之間進行混合運算,這就帶來了型別轉換問題。c語言隱式轉換規則簡單來說就是先進行整型提公...

C 中資料型別轉換 隱式轉換

隱式轉換 一般是低型別向高型別轉化,能夠保證值不發生變化。隱式數值轉換 從 sbyte 到 short int long float double 或 decimal。從 byte 到 short ushort int uint long ulong float double 或 decimal。從...