1樓:新居辨兄
隱式轉換就是
copy不帶轉換型別的轉換,如int轉float你可以這樣子float a ;int b = 4;
a=b就是隱式轉換,而a = (float)b就是顯示轉換。區別在於當向下轉換時如果不顯示轉換就會有問題,如float a = 4.5; int b = a;這裡就可能報錯,因為int可以自動上升為float,但由float不能自動轉化為int,這裡就需要顯式轉換,即int b = (float)a才是最保險的;所以顯式轉換肯定不會出錯,但隱式轉換就說不定了。
c語言資料型別的自動轉換和強制轉換有什麼區別
2樓:學雅思
一、指代不同
1、自動轉換:參與運算量的型別不同,則先轉換成同一型別,然後進行運算。
2、強制轉換:是通過型別轉換運算來實現的。
二、方式不同
1、自動轉換:轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。
2、強制轉換:功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。
三、特點不同
1、自動轉換:是在源型別和目標型別相容以及目標型別廣於源型別時發生一個型別到另一類的轉換。
2、強制轉換:所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表示式,也要先轉換成double型,再作運算。
3樓:濺糝埤
c語言資料型別轉換分自動轉換和強制轉換兩類。
自動轉換自動轉換髮生在不同資料型別的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規則:
1.若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。
2.轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。
3.所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表示式,也要先轉換成double型,再作運算。
4.char型和short型參與運算時,必須先轉換成int型。
5.在賦值運算中,賦值號兩邊量的資料型別不同時, 賦值號右邊量的型別將轉換為左邊量的型別。 如果右邊量的資料型別長度左邊長時,將丟失一部分資料,這樣會降低精度, 丟失的部分按四捨五入向前舍入。
強制型別轉換
強制型別轉換是通過型別轉換運算來實現的。其一般形式為: (型別說明符) (表示式) 其功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。
例如: (float) a 把a轉換為實型(int)(x+y) 把x+y的結果轉換為整型在使用。
強制轉換時應注意以下問題:
1.型別說明符和表示式都必須加括號(單個變數可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之後再與y相加了。
2.無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而不改變資料說明時對該變數定義的型別。
c語言資料型別如何轉換?
4樓:匿名使用者
不是有強制型別
轉換嗎?
強制型別轉換 強制型別轉換
當運算元的型別不同,而且不屬於基本資料型別時,經常需要強制型別轉換,將運算元轉化為所需要的型別。強制型別轉換具有兩種形式,稱為顯式強制轉換和隱式強制型別轉換。
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型預設的是小數點後幾位我忘了,你自己除錯下,就會明白了!
5樓:考潤劉原
自動轉換和隱式轉換是一類的吧。比如int
a;charb=
2;a=b
*2;//這裡b的值就自動/隱式轉換為int型別關於強制轉換比floata=
(float
)1/2謝謝採納
c語言中不同資料型別的相互轉化怎麼做?
6樓:物理公司的
在c語言中,不同資料型別在進行運算時首先要轉換成同一型別,一種是自動轉換,二是強制轉換,如(int)a 將a強制轉換為int型
轉換原則:箭頭是轉換方向 char,short->int->unsigned->long,float->double
說這個題之前要接受一個事實:不同計算機上執行此程式結果會不一樣,原因和你是好多位計算機有關係,在很多書上int佔兩個位元組,而在有些計算機卻佔4個位元組,具體是好多你可以用sizeof(int)測試一下,那我的計算機就佔4個位元組,現在再看題:c=x+a x為長整型a為整型,運算之前先將a自動轉換為長整型,x=-5,計算機儲存為0fffffffbh,a=3,x+a=0fffffffeh 輸出格式是%u 也就是以十進位制無符號形式輸出,結果為4294967294而不是65534。
d=y+b,a=3就不用多說明了,最後用%f輸出單精度或雙精度浮點數,其預設為6位小數,要想控制顯示位數用%m.nf,具體看看書哈
在c語言中不同的資料型別之間是如何轉換的 不同的資料型別是怎樣計算的
7樓:手機使用者
在c語言中,不同資料型別在進行運算時首先要轉換成同一型別,一種是自動轉換,二是強制轉換,如(int)a 將a強制轉換為int型 轉換原則:箭頭是轉換方向 char,short->int->unsigned->long,float->double 說這個題之前要接受一個事實:不同計算機上執行此程式結果會不一樣,原因和你是好多位計算機有關係,在很多書上int佔兩個位元組,而在有些計算機卻佔4個位元組,具體是好多你可以用sizeof(int)測試一下,那我的計算機就佔4個位元組,現在再看題:
c=x+a x為長整型a為整型,運算之前先將a自動轉換為長整型,x=-5,計算機儲存為0fffffffbh,a=3,x+a=0fffffffeh 輸出格式是%u 也就是以十進位制無符號形式輸出,結果為4294967294而不是65534。d=y+b,a=3就不用多說明了,最後用%f輸出單精度或雙精度浮點數,其預設為6位小數,要想控制顯示位數用%m.nf,具體看看書哈
c語言資料型別的轉換
8樓:匿名使用者
讓我來說說這個問題吧。
一.自動轉換
自動轉換遵循以下規則:
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。
c語言資料型別如何轉換C語言資料型別如何轉換?
不是有強制型別 轉換嗎?強制型別轉換 強制型別轉換 當運算元的型別不同,而且不屬於基本資料型別時,經常需要強制型別轉換,將運算元轉化為所需要的型別。強制型別轉換具有兩種形式,稱為顯式強制轉換和隱式強制型別轉換。1 顯式強制型別轉換 顯式強制型別轉換需要使用強制型別轉換運算子,格式如下 type 或 ...
c語言中各資料型別不能進行哪些運算
首先,你得明白什麼是資料型別?我們知道資料在記憶體中儲存都是按照位元組為單位儲存的,如何來表示一個整形或一個字元型等等資料,這就要用到資料型別了,所以,所謂的資料型別,其實就是用來標識資料佔據幾個位元組等資訊引數的,系統資料型別很好理解,自定義的資料型別 如用struct或class來定義的 其實也...
關於c語言資料型別的問題,關於C語言資料型別的問題
因為有的資料比較長,比如1111111111111111,這樣用int就存不下了,要用長整型來儲存了 可能強制轉換時要用到吧 這只是我的觀點 long long hello 1 2147483647 cout hello endl cout int max endl hello右邊表示式 是1 in...