c語言中的基本資料型別--資料之間的混合運算
在程式執行中,變數的資料型別是可以轉換的,轉換方式有兩種。
一、自動轉換:自動轉換發生在不同資料型別的量運算時,由編譯系統自動完成。
1.自動轉換遵循的規則
(1)若參與運算的量的資料型別不同,則先轉換成同一型別,然後進行運算。
(2)轉換資料始終往長度增加的方向進行,以確保精確度,如int和long運算,則將int轉換為long再運算。
(3)所有的浮點運算都是以雙精度(double)進行的,即使僅含有float變數的表示式,也要先轉換為double再運算。
(4)char型和short進行運算時,要先轉換為int型。
(5)在賦值運算中,賦值號兩邊的資料型別不同時,將賦值號右邊的資料型別轉換成左邊的型別,結果是如果右邊量的資料長度長於左邊長度,會使一部分資料丟失,會降低精度,丟失的部分四捨五入。
2.自動轉換的運算規則
float →→→→→ double 高階型別
↑
↑ ↑
long ↑
↑ ↑
↑ ↑
unsigned ↑↑↑
char,short →→→→→ int 低階型別
p.s橫向箭頭是運算時必定要進行的轉換
如:char必須轉換為int才可以運算
float必須轉換為double 才能運算
縱向箭頭表示當運算物件的型別不同時轉換的方向
如char和float運算,是將char轉為double後運算
注:char轉為double的過程是一次性的,無需中間過程,其他轉換同樣,不同型別的資料只有轉換到上圖中相交的節點時才能進行運算。
例項:
m*n+'b'+23-d/e
m→int n→float
b,d→double e→long
分析:c和其他語言一樣,從左向右掃瞄表示式
step1:計算m*n,int和float交匯於double,先將m,n轉換為double,再計算,結果為double。
step2:'b'為char,轉換為double後於第一步結果相加,結果為double。
step3:24為int,轉為double後運算,結果為double。
step4:"/"運算優先順序高於"-"運算,先運算d/e,e轉換為double型後運算,結果為double。
二、強制轉換
強制轉換是通過型別轉換執行實現的
公式:(型別說明符)(表示式)括號也是公式的一部分,使用時不省略
功能,把表示式的運算結果強制轉換為型別說明符說明的型別。
例:(float)a 把a轉換為單精度浮點型
(int)(x+y) 把x+y的結果轉換為整型
注意事項
1.型別說明符和表示式都要用園括號括起來,單個變數才可以不要括號。
2.無論是自動運算還是強制運算,都只是為本次運算而做的臨時運算,不會改變定義該變數時宣告的資料型別。
混合運算規則
重要規則 byte short char 做混合運算時,先各自轉換為 int 型別,再做運算 以下在編譯期就出錯,因為編譯器只檢查語法,jvm不允許 int 轉換為 byte 丟失精度 雖然結果為30,但是運算是在執行期 byte a 10 short b 20 byte c a b 報錯 syst...
混合型別運算規則
混合型別運算規則 在表示式遇到不同資料型別的混合運算時,要求不同型別的資料要先轉換成同一型別然後才能進行運算。預設編譯器會有個規則進行自動轉換 自動轉換遵循以下規則 1 若參與運算的兩個引數型別不同,則先轉換成同一型別,然後再進行運算 2 按照資料長度增加的方向進行 即 由 少位元組型別 向 多位元...
C 語音 位運算詳解
c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變1...