c語言中強制型別轉換究竟改變了什麼

2021-08-26 02:55:44 字數 4989 閱讀 8257

1樓:

不同型別的變數在記憶體中有不同的儲存方式和不同長度,強制轉型前後有什麼不同都要轉換過來。例如int y=3;char x=(char)y;,他們只是長短不同,就把y的高3位元組全截掉,只把最低一個位元組賦給了x;反過來,若char y=3;int x=(int)y;,那麼,將把高3位元組全用0補齊。若是浮點數與整型數強制轉型,不僅儲存長度發生了變化,而且儲存方式也發生了變化:

整數用補碼錶示,而浮點數用階碼+原碼錶示,都要一一轉換過來。還有指標變數,轉換也較複雜。強制轉型時為目標型別設定一個臨時變數,輪換後就用這個臨時變數操作,一旦操作結束,臨時變數也消失了,整個過程是由編譯器編譯時安排好了的。

2樓:匿名使用者

如果是非指標的強制型別轉換,那就是進行了計算,例如double轉int;如果是指標的強制型別轉換,修改了地址的跨度,以及對所指向的數的解析。例如一個int指標指向原本是float格式的數的記憶體後,就會按照int的標準解析這塊記憶體。

3樓:抹香侯

改變了地址跨度

比如int* a;

int佔4個位元組,這樣a+1的時候實際上是加上4個地址長度如果(char*)a + 1的話,由於char佔一個位元組,所以這個加一實際上是加上一個地址長度。

4樓:

強制轉換型別改變了變數活常量的型別。如:char a ,int b,如果我們想把b轉換成char型別,就可以這樣(char )int b.

之後b就變成char型別了。強制轉換就是在要轉換的前面加一個()裡面是你想要轉換的型別

c語言中強制型別轉換後原變數值和資料型別不變 對嗎?

5樓:聽不清啊

強制型別轉換是把變數從一種型別轉換為另一種資料型別。

這話完全正確。

例如,如果您想儲存一個 long 型別的值到一個簡單的整型中,您需要把 long 型別強制轉換為 int 型別。您可以使用強制型別轉換運算子來把值顯式地從一種型別轉換為另一種型別。但這隻適用於本次使用,原變數的型別及其中的值都不會發生變化。

擴充套件資料:

舉例說明

使用強制型別轉換運算子把一個整數變數除以另一個整數變數,得到一個浮點數:

#include int main()

當上面的**被編譯和執行時,它會產生下列結果:

value of mean : 3.400000sum=17

6樓:yx陳子昂

對的,表示式的值和型別變了,但不會影響原變數

c語言中 強制型別轉換的一般形式是什麼?

7樓:福建省寧德市

強制型別轉換的一般形式為:(型別說明符)(表示式),例如: (float) a 把a轉換為浮點型,(int)(x+y) 把x+y的結果轉換為 整型

強制型別轉換是通過型別轉換運算來實現的。功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。

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

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

8樓:匿名使用者

當運算元的

型別不同,而且不屬於基本資料型別時,經常需要強制型別轉換,將運算元轉化為所需要的型別。

型別轉換;   1.自動型別轉換   2.強制型別轉換   自動型別轉換分兩種情況:

1,不同型別的資料進行運算時,系統會自動將運算優先順序別低的轉換成級別高的,結果和運算級別高的資料型別一樣。2,賦值運算子兩邊型別不一樣時,系統會自動將右側表示式的型別轉換成左側的變數型別,然後再賦值   強制型別轉換:   如:

(int)3.1415 //就是取整數部分   (int)a%10 //取a的個位數   若a是int型,取a的平方根就是 sqrt((double)a)

9樓:岩石の審判

int a=3; //定義整型a

double b=(double)a; //強制把整型a轉換為雙精度實型

10樓:分子路徑

假設double a;把a轉換成int型

int(a)

或(int)a都可以

11樓:藍藍肥皂

double x;

int y;

y=(int)x;

c語言中強制型別轉換會改變原來變數的型別麼?比如a=(float)b,那麼b的也會變成浮點型麼?

12樓:匿名使用者

題主的關注點應該在強制型別轉換後原地址的型別不會變上,但如果a也是整型,這樣把一個浮點數賦值給一個整型,也會進行強制型別轉換,即我認為a還是整型。thx

13樓:apple林

不會,你宣告b是什麼型別,強制型別轉換賦值後,b還是原來的型別的

14樓:匿名使用者

a=(float)b,是將b的型別強制裝換為浮點型後給a,但b的型別沒有發生改變.

15樓:匿名使用者

a=(float)b,只是把b由int型強制轉換成float型,然後賦值給a,最後結果是a和b仍然是int型

16樓:匿名使用者

不回 只有計算的結果改變

17樓:此生不愛

你宣告b的時候是什麼型別,b就是什麼型別,不會改變的。

18樓:

b不會!a會變成float型別

19樓:葛朋

不會 可以編譯下 看看結果

20樓:

b依然是整形,不會改變;a會轉換為float形

c語言資料型別如何轉換?

21樓:匿名使用者

不是有強制型別

轉換嗎?

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

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

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型預設的是小數點後幾位我忘了,你自己除錯下,就會明白了!

22樓:考潤劉原

自動轉換和隱式轉換是一類的吧。比如int

a;charb=

2;a=b

*2;//這裡b的值就自動/隱式轉換為int型別關於強制轉換比floata=

(float

)1/2謝謝採納

為什麼在c語言中任何變數定義後,其資料型別不能改變?,只能改變其值

23樓:劃破天際の星

變數在宣告的時候,系統並不會分配記憶體,但是一旦變數被定義了,那麼系統就專會為他屬

分配一塊記憶體,在同一個編碼環境下,這個記憶體大小隻和變數的型別有關。這時候如果你要改變變數的型別,相當於要改變變數的記憶體空間大小,這個編譯器是不允許的。

如果一定要轉換,可以用強制型別轉換,比如:

int main()

24樓:唐

在c語言中,任何型別的變數在定義後,當給變數賦值時,給他們在記憶體中分配的版空權間就是一定的了,不同的資料型別在記憶體中佔的大小不同,這時我們就只能根據資料型別給變數賦值,不能超出型別的最大限制…

因此變數的型別不能隨便改動,否則會發生記憶體溢位,或者記憶體錯亂的現象…改變值的大小時也要注意,不能超出了型別的取值範圍……

25樓:匿名使用者

舉個bai例子:int i; 這裡 i是整du形變數,這個zhi過程中,內部已經給它dao

分配了一個整形空專間用來儲存屬

整形變數,也就是說 這個空間儲存不了非整形變數。假如你硬要給它賦值非整形變數如i=1.1,c語言會直接取整數部分,小數部分捨棄,結果還是整形。

如果你硬要在使用過程中改變其資料型別也不是沒有辦法。那就是對其強制型別轉換,例如將整形轉位浮點行 j= (float)i 這裡i就相當於浮點型,但是只限於這個式子。在這個式子外,其還是整形。

26樓:

這就像你生了來個兒子一樣(變源性手術除外),你只能改他的名字,他的外形,身高什麼的……改不了他是你兒子這個事實。變數一定一下來必須有一個本質的型別,這個型別在變數的生命週期裡面是不可更改的 (無聊了,來了個比喻,不好意思哦)

C語言自動型別轉換和強制型別都不會四捨五入嗎

c語言資料型別轉換自轉換強制轉換兩類 自轉換自轉換發同資料型別量混合運算由編譯系統自完自轉換遵循規則 1.若參與運算量型別同則先轉換同型別進行運算 2.轉換按資料度增加向進行保證精度降低int型long型運算先int量轉long型再進行運算 3.所浮點運算都雙精度進行即使僅含float單精度量運算表...

c語言中有string型別變數嗎

這裡的 string 有 二 義性。1 如果 string 是普通詞彙,c語言中有字元型別變數嗎 答,有。字元型別 用 char 宣告。char str this is a string 2 如果 string 是專用詞彙,c語言中有string型別變數嗎 答,沒有。string 是 類,是 cla...

C 輸入char字元,將字元強制型別轉換為int型,為什麼輸出的會是它的ASCII碼

1.你說的是ascii碼吧2.輸入字元轉化為ascii是什麼意思?ascii碼本身就是一系列字元,你說的是ascii碼值麼?3.要將ascii碼進行哪種運算後輸出?提示一下,單個ascii字元是可以強制轉換為int的。當然是這樣的,因為你把字元變數a轉換為了整型,也當然就是她所對應的 ascii碼了...