C語音混合運算規則

2021-09-30 09:59:38 字數 1564 閱讀 2470

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...