當前位置:編程學習大全網 - 編程語言 - c語言數據類型有高有低。

c語言數據類型有高有低。

妳說的先進體現在改造上了嗎?如果有,下面是答案。

自動轉換遵循以下規則:

1)如果涉及的操作數類型不同,則先轉換為相同的類型再進行運算。

2)在增加數據長度的方向進行轉換,保證精度不降低。如int型和long型運算,運算前將int量轉換成long型。

A.如果兩種類型的字節數不同,則將其轉換為字節數高的類型。

b,如果兩個類型的字節數相同,且壹個有符號,壹個無符號,則轉換為無符號類型。

3)所有浮點運算都是以雙精度進行的,即使表達式只包含float單精度運算,也要在運算前轉換成double類型。

Char類型和short類型參與運算時,必須先轉換成int類型。

5)在賦值操作中,當賦值號兩邊的量的數據類型不同時,賦值號右邊的量的類型會轉換成左邊的量的類型。如果右邊量的數據類型長度左邊長,會丟失壹些數據,降低精度,丟失的部分通過四舍五入向前取整。

隱式轉換

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

1.算術轉換

在進行算術運算(加、減、乘、除、余數和符號運算)時,不同類型的數據在運算前必須轉換成同壹類型的數據。算術轉換的原理如下:

在運算中,表達式中最長的類型是主類型,其他類型的數據都轉換成這種類型,比如:

(1)如果操作數中有double類型或float類型,則所有其他類型的數據都轉換為double類型進行運算。

(2)如果操作數的最長類型是long,其他所有類型都轉換為long。

(3)如果操作數的最長類型是int類型,那麽char類型也轉換成int類型進行運算。算術轉換是在運算過程中自動完成的。

2.賦值轉換

執行賦值操作時,賦值運算符右邊的數據類型必須轉換為賦值號左邊的類型。如果右邊的數據類型長度大於左邊的數據類型長度,則需要進行截斷或舍入運算。

這裏有壹個例子來說明:

char ch

int i,result

浮動f;

雙d;

結果= 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是雙型,所以ch/I→雙型,ch/I+(f * d-I)→雙型。

(4)因為結果是int,所以ch/i+(f*d-i)→double→int,即進行截斷和舍入,最後的值是整數。

3.輸出轉換

用程序中的printf函數以指定格式輸出數據時,當要輸出的鹽數據類型與輸出格式不壹致時,會自動進行類型轉換。例如,當壹個長數據以整數格式(%d)輸出時,相當於把長數據轉換成整數(int)數據輸出;當壹個字符(char)數據以整數格式輸出時,相當於把char數據轉換成int數據。

註意:將長數據轉換成短數據輸出時,其值不能超過短數據允許的取值範圍,否則轉換時會出錯。比如:

長a = 80000

printf("%d ",a);

運行結果是14464,因為int類型的最大允許值是32767,80000,超過了這個值,所以結果取模為32768的余數,即進行如下余數運算:

(80000-32768)-32768=14464;

當輸出數據類型與輸出格式不壹致時,通常會出現錯誤,例如:

int d = 9;

printf("%f ",d);

或者

浮動c = 3.2

printf("%d ",c);

會產生錯誤的結果。

如果在同壹個語句或表達式中使用了多種類型的變量和常量(混合類型),C會自動將它們轉換成相同的類型。以下是自動類型轉換的基本規則:

1.在表達式中,char和short的值,不管是有符號的還是無符號的,都會自動轉換為int或無符號int(如果short的大小與int相同,則無符號short的表示範圍大於int,這種情況下,無符號short轉換為無符號int)。因為它們被轉換成代表更大範圍的類型,所以這種轉換被稱為“提升”。

2.將各種數據類型從高到低排序,即:long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int和int。這裏有壹個小小的例外。如果long和int大小相同,那麽無符號int的秩應該在long之上。Char和short沒有出現在這個排名列表中,因為它們應該已經升級為int或unsigned int。

3.在任何涉及兩種數據類型的操作中,級別較低的類型將被轉換為級別較高的類型。

4.在賦值語句中,在將=右邊的值賦給=左邊的變量之前,應該將右邊值的數據類型轉換為左邊變量的類型。也就是說,右邊的值將被轉換為左邊變量的任何數據類型的值。此過程可能會導致右側值的類型升級,也可能會導致其類型降級。所謂“降級”,就是將等級較高的類型轉換為等級較低的類型。

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

本文來自CSDN博客,轉載請註明出處:/seloo oo/archive/2009/12/16/5016836 . aspx

  • 上一篇:fc 第二次機器人大戰金手指代碼
  • 下一篇:數字200的全拆分問題(如有解法將追加最高200分)
  • copyright 2024編程學習大全網