變數的本質:一段連續記憶體空間的別名
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...