c語言資料型別轉換規則類似題目

2021-03-05 09:22:07 字數 5043 閱讀 6198

1樓:匿名使用者

表示式的結果double型的,但是由於c是float型,所以表示式的賦值結果還是float型

2樓:月生戀珊

在c語言中,不同資料型別在進行運算時首先要轉換成同一型別,一種是自動轉換,

二是強制轉換,如(int)a 將a強制轉換為int型箭頭是轉換方向 char,short->int->unsigned->long,float->double

float c=

3樓:匿名使用者

因為在c/c++中 double 類 型的變數能 自動轉換為 float 型別的

而 float 要轉換為 double 型別的 則需要強制型別轉換 eg: double b; float a=b;// 此時a為float型別的

double a; float b=(double) a;//此時b為float 型別的

總結一點:

char,short,int,unsigned,long,float,double 從左往右型別轉換都需要強制型別轉換 反之則不用的 自動轉換

c語言資料型別的轉換!!規則是什麼!

4樓:匿名使用者

題目是選b吧,定義c為float,結果也是float,編譯時一般會有警告的,不會那麼寫,題目只是想考細節,程式設計時會用強制轉換語法,不僅能從低精度強制轉換為高精度,也可以根據需要反過來

5樓:匿名使用者

答案是b吧?變數的型別不是固定不變的麼?變化的只是資料的型別。。。

6樓:匿名使用者

選b,在賦值語句中,計算結果會轉換成被賦值的資料型別。

c語言資料型別的轉換

7樓:匿名使用者

讓我來說說這個問題吧。

一.自動轉換

自動轉換遵循以下規則:

1) 若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。

2) 轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。

a.若兩種型別的位元組數不同,轉換成位元組數高的型別

b.若兩種型別的位元組數相同,且一種有符號,一種無符號,則轉換成無符號型別

3)所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表示式,也要先轉換成double型,再作運算。

4)char型和short型參與運算時,必須先轉換成int型。

5)在賦值運算中,賦值號兩邊量的資料型別不同時,賦值號右邊量的型別將轉換為左邊量的型別。如果右邊量的資料型別長度左邊長時,將丟失一部分資料,這樣會降低精度,丟失的部分按四捨五入向前捨入。

二.隱式轉換

隱式型別轉換分三種,即算術轉換、賦值轉換和輸出轉換。

1.算術轉換

進行算術運算(加、減、乘、除、取餘以及符號運算)時,不同型別數招必須轉換成同一型別的資料才能運算,算術轉換原則為:

在進行運算時,以表示式中最長型別為主,將其他型別位據均轉換成該型別,如:

(1)若運算數中有double型或float型,則其他型別資料均轉換成double型別進行運算。

(2)若運算數中最長的型別為long型.則其他型別數均轉換成long型數。

(3)若運算數中最長型別為int型,則char型也轉換成int型進行運算。算術轉換是在運算過程中自動完成的。

2.賦值轉換

進行賦值操作時,賦值運算子右邊的資料型別必須轉換成賦值號左邊的型別,若右邊的資料型別的長度大於左邊,則要進行截斷或捨入操作。

下面用一例項說明:

char ch;

int i,result;

float f;

double d;

result=ch/i+(f*d-i);

(1)首先計算 ch/i,ch → int型,ch/i → int型。

(2)接著計算 f*d-i,由於最長型為double型,故f→double型,i→double型,f*d-i→double型。

(3)(ch/i) 和(f*d-i)進行加運算,由於f*d-i為double型,故ch/i→double型,ch/i+(f*d-i)→double型。

(4)由於result為int型,故ch/i+(f*d-i)→double→int,即進行截斷與捨入,最後取值為整型。

3.輸出轉換

在程式中將資料用printf函式以指定格式輸出時,當要輸出的鹽據型別與輸出格式不符時,便自動進行型別轉換,如乙個long型資料用整型格式(%d)輸出時,則相當於將long型轉換成整型(int)資料輸出;乙個字元(char)型資料用整型格式輸出時,相當於將char型轉換成int型輸出。

注意:較長型資料轉換成短型資料輸出時,其值不能超出短型資料允許的值範圍,否則轉換時將出錯。如:

long a=80000;

printf("%d",a);

執行結果為14464,因為int型允許的最大值為32767,80000超出此值,故結果取以32768為模的餘數,即進行如下取餘運算:

(80000-32768)-32768=14464;

輸出的資料型別與輸出格式不符時常常發生錯誤,如:

int d=9;

printf("%f",d);

或float c=3.2;

printf("%d",c);

將產生錯誤的結果。

同一句語句或表示式如果使用了多種型別的變數和常量(型別混用),c 會自動把它們轉換成同一種型別。以下是自動型別轉換的基本規則:

1. 在表示式中,char 和 short 型別的值,無論有符號還是無符號,都會自動轉換成 int 或者 unsigned int(如果 short 的大小和 int 一樣,unsigned short 的表示範圍就大於 int,在這種情況下,unsigned short 被轉換成 unsigned int)。因為它們被轉換成表示範圍更大的型別,故而把這種轉換稱為「公升級(promotion)」。

2. 按照從高到低的順序給各種資料型別分等級,依次為:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。

這裡有乙個小小的例外,如果 long 和 int 大小相同,則 unsigned int 的等級應位於 long 之上。char 和 short 並沒有出現於這個等級列表,是因為它們應該已經被公升級成了 int 或者 unsigned int。

3. 在任何涉及兩種資料型別的操作中,它們之間等級較低的型別會被轉換成等級較高的型別。

4. 在賦值語句中,= 右邊的值在賦予 = 左邊的變數之前,首先要將右邊的值的資料型別轉換成左邊變數的型別。也就是說,左邊變數是什麼資料型別,右邊的值就要轉換成什麼資料型別的值。

這個過程可能導致右邊的值的型別公升級,也可能導致其型別降級(demotion)。所謂「降級」,是指等級較高的型別被轉換成等級較低的型別。

5. 作為引數傳遞給函式時,char 和 short 會被轉換成 int,float 會被轉換成 double。使用函式原型可以避免這種自動公升級。

三.強制轉換

強制型別轉換是通過型別轉換運算來實現的。其一般形式為:(型別說明符)(表示式)其功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。

自動轉換是在源型別和目標型別相容以及目標型別廣於源型別時發生乙個型別到另一類的轉換。例如: (float) a 把a轉換為實型,(int)(x+y) 把x+y的結果轉換為整型。

在使用強制轉換時應注意以下問題:

1.型別說明符和表示式都必須加括號(單個變數可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之後再與y相加了。

2.無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而不改變資料說明時對該變數定義的型別。

例1:main()

f<--5.75

將float f強制轉換成本例表明,f雖強制轉為int型,但只在運算中起作用, 是臨時的,而f本身的型別並不改變。因此,(int)f的值為 5(刪去了小數)而f的值仍為5.75。

8樓:匿名使用者

不是有強制型別轉換嗎?

強制型別轉換 強制型別轉換

當運算元的型別不同,而且不屬於基本資料型別時,經常需要強制型別轉換,將運算元轉化為所需要的型別。強制型別轉換具有兩種形式,稱為顯式強制轉換和隱式強制型別轉換。

1、顯式強制型別轉換

顯式強制型別轉換需要使用強制型別轉換運算子,格式如下:

type()

或(type)

其中,type為型別描述符,如int,float等。為表示式。經強制型別轉換運算子運算後,返回乙個具有type型別的數值,這種強制型別轉換操作並不改變運算元本身,運算後運算元本身未改變,例如:

int nvar=0xab65;

char cchar=char (nvar);

上述強制型別轉換的結果是將整型值0xab65的高階兩個位元組刪掉,將低端兩個位元組的內容作為char型數值賦值給變數cchar,而經過型別轉換後nvar的值並未改變。

2、隱式強制型別轉換

隱式型別轉換發生在賦值表示式和有返回值的函式呼叫表示式中。在賦值表示式中,如果賦值符左右兩側的運算元型別不同,則將賦值符右邊運算元強制轉換為賦值符左側的型別數值後,賦值給賦值符左側的變數。在函式呼叫時,如果return後面表示式的型別與函式返回值型別不同,則在返回值時將return後面表示式的數值強制轉換為函式返回值型別後,再將值返回,如:

int nvar;

double dvar=3.88;

nvar=dvar;//執行本句後,nvar的值為3,而dvar的值仍是3.88

1,若已知x,y為double型別,則表示式:x=1,y=x+3/2結果是多少啊?

因為x,y都是double型,所以執行了y=x+3/2這個語句後,會輸出小樹部分,double型預設的是小數點後幾位我忘了,你自己除錯下,就會明白了!

C語言中基本資料型別有哪些,c語言簡單資料型別有哪些

void 宣告函式無返回值或無引數,宣告無型別指標,顯示丟棄運算結果。char 字元型版 型別資料權,屬於整型資料的一種。int 整型資料,表示範圍通常為編譯器指定的記憶體位元組長。float 單精度浮點型資料,屬於浮點資料的一種。double 雙精度浮點型資料,屬於浮點資料的一種。bool 布林型...

C語言資料型別所佔位元組是和執行的機器位數有關還是編譯器有關

1全部1 c語言一般指的是ansi c的標準,對應的處理器分別是32位和64位的。2 型別分為內建型別和自定義型別 非內建型別 內建型別指的是無需宣告就可使用的型別,比如char,double,int等。自定義型別指的是使用前必須宣告的,如struct structname 結構型別,int a 5...

C語言中左值物件有哪些 哪些資料型別或是表示式可以算作是左值

左值,算是可訪問儲存的區域,要求 可訪問儲存 那就可改變,變數 很多態別 就是,常數不是,你可以根據這個判斷下左值。理解下左值物件吧,一般來說是計算機裡一塊可訪問可儲存的區域,物件只是這塊區域的抽象標識,變數a,b,p等都算,只不過按不同的型別分出不同大小的區域。標識可以任意給,所以物件有哪些,舉不...