C語言 資料型別轉換

2021-09-25 21:21:20 字數 1699 閱讀 4563

變數的本質:一段連續記憶體空間的別名

int a 告訴c編譯器給我分配四個位元組的記憶體。

1、資料型別的本質:可理解為建立變數的模具,是固定大小記憶體的別名。

2、資料型別的作用:

3、求資料型別大小:sizeof()

注意:sizeof()是操作符(單目運算子),不是函式。sizeof測量的實體大小在編譯期間就已經確定,sizeof操作符以位元組形式給出了其運算元的儲存大小。

sizeof操作符的結果型別是size_t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。

4、資料型別可以有別名

一般形式:(型別名)(表示式)

例 (

int)

(x + y)

(int

)x + y

(double)(3

/2)(

int)

3.6

說明:強制轉換得到所需型別的中間變數,原變數型別、變數值保持不變

較高型別向較低型別轉換時可能發生精度損失問題

(1)格式輸出

例如

int a =

2147483648

; printf(

"%d"

,a);

這樣賦值後,輸出變數a的值並非預期的2147483648,而是-2147483648,原因是2147483648超出了int型別能夠裝載最大值,資料產生了溢位。如果換一種輸出格式控制符,**如下所示:

printf(

"%u"

,a);

輸出的結果就是變數a的值,原因是%u是按照無符號整型輸出的資料,而無符號整型的資料範圍上限大於2147483648這個值。

(2)當把佔位元組較小的資料賦值給佔位元組較大的資料時,可能出現以下兩種情況:

第1種情況,當位元組較大數是無符號數時,轉換時新擴充的位被填充成0

char b =10;

unsigned short a = b;

printf(

"%u"

,a);

這樣賦值後,變數a中輸出的值是10。

第二種情況,當位元組較大數是有符號數時,轉換時新擴充的位被填充成符號位。

char b =

255;

short a = b;

printf(

"%d"

,a);

這樣賦值後,變數a輸出的值是-1,變數a擴充的高8位,根據變數b的最高位1都被填充成了1,所以數值由正數變成了負數,因為變數a的最高位符號位是1,至於為什麼16個1表示的是-1,涉及到二進位制數的原碼和補碼問題

C語言資料型別轉換

自動轉換發生在不同資料型別的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規則 若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。所有的浮點運算都是以雙精度進行的,即使僅...

C語言資料型別轉換

變數的資料型別是可以轉換的。轉換的方法有兩種,一種是自動轉換,一種是強制轉換。自動轉換發生在不同資料型別的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規則 若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先...

C語言資料型別轉換

資料型別轉換就是將資料 變數 表示式的結果 從一種型別轉換到另一種型別。例如,為了儲存小數你可以將int型別的變數轉換為double型別。資料型別轉換的一般格式為 type name expressiontype name為要轉換到的資料型別,expression為表示式。例如 float a 把a...