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

2022-05-19 15:34:23 字數 5536 閱讀 1952

1樓:

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.論強制轉換或自轉換都本運算需要變數資料度進行臨性轉換改變資料說明該變數定義型別

2樓:gta小雞

型別轉換只會「舍」而不會「入」,也就是捨去小數部分。例如乙個浮點型值為3.999,經型別轉換到int型後值為3。

但樓下說c語言沒有四捨五入的概念,這是錯誤的。某些情況下程式會進行四捨五入,例如格式化輸出時。以%a.

bf(a和b都是數字)輸出時,系統將對b+1位進行四捨五入,然後輸出保留小數點後b位的結果。例如定義浮點數f=3.999,然後printf("%.

2f",f),結果將是4.00。

3樓:匿名使用者

c語言中沒有四捨五入的概念。

c語言:int型的強制型別轉換是按四捨五入嗎?

4樓:跪著作揖

強制型別轉換int的結果只保留整數部分,不是四捨五入。

例如:int 3.14,結果為3;

int  3.58,結果也為3。

int是將乙個數值向下取整為最接近的整數的函式。int是資料庫中常用函式中的取整函式,常用來判別乙個數能否被另乙個數整除。

擴充套件資料

int 函式使用的注意事項:

1、 語法int(number)其中number是需要進行向下捨入取整的實數。

2、 int函式是不進行四捨五入,直接去掉小數部分取整。

3、int函式處理負數的小數時總是向上進製的。

標準規定int的最小取值範圍是 -32767 到 32767。

int的取值範圍因機器而異,但是一定要大於或者等於 -32767 到 32767。一般來說,int占用乙個字的記憶體空間。因此,字長為 16 位(bit)的舊式 ibm 相容機使用 16 位來儲存整型int,取值範圍是-32768 到 32767 。

目前的個人電腦一般都是 32 位字長的,這些電腦中,int一般也是 32 位的,取值範圍是 -2147483648 到 2147483647。對於使用 64 位 cpu 的電腦,使用更多位儲存int也是很自然的事情,取值範圍當然也會更大。

5樓:匿名使用者

作為函式,int函式指資料庫中常用函式中的

「向下取整函式」。常用來取乙個數中的整數部分。int是將乙個數值向下取整為最接近的整數的函式。為取整函式。

意思是將被轉換數直接擷取整數部分,不進行四捨五入運算。例如:

int(123.456);//取值為123

int(-123.456);//取值為124

int(1234.56);//取值為1234

擴充套件資料:

除int外,其他強制轉換有:

void:宣告函式無返回值或無引數,宣告無型別指標,顯示丟棄運算結果。(c89標準新增)

char:字元型型別資料,屬於整型資料的一種。(k&r時期引入)

int:整型資料,表示範圍通常為編譯器指定的記憶體位元組長。(k&r時期引入)

float:單精度浮點型資料,屬於浮點資料的一種。(k&r時期引入)

double:雙精度浮點型資料,屬於浮點資料的一種。(k&r時期引入)

_bool:布林型(c99標準新增)

_complex:複數的基本型別(c99標準新增)

_imaginary:虛數,與複數基本型別相似,沒有實部的純虛數(c99標準新增)

_generic:提供過載的介面入口(c11標準新增)

修飾關鍵字:

short:修飾int,短整型資料,可省略被修飾的int。(k&r時期引入)

long:修飾int,長整型資料,可省略被修飾的int。(k&r時期引入)

long long:修飾int,超長整型資料,可省略被修飾的int。(c99標準新增)

signed:修飾整型資料,有符號資料型別。(c89標準新增)

unsigned:修飾整型資料,無符號資料型別。(k&r時期引入)

restrict:用於限定和約束指標,並表明指標是訪問乙個資料物件的唯一且初始的方式。(c99標準新增)

6樓:聽不清啊

不是的。

c語言的int型的強制型別轉換是截尾取整的。

即int x=(int)3.997;

x的值是3。

7樓:匿名使用者

不會四捨五入,會直接截斷取整數部分。

8樓:匿名使用者

有四捨五入的情況,在你想要保留幾位小數的時候,多餘的緊接著的一位要四捨五入

不過c裡面沒有提供四捨五入的函式,不過你可以這樣a = (int)(a*100 + 0.5)/100這只是乙個小技巧,對a的第三位進行四捨五入比如將55.3351保留2位小數,第三位四捨五入,可以用a=(a*100+0.

5)/100.0或a=(int)(a*100+0.5)/100.

0,,,我的問題是,,兩個都行嗎?有什麼區別,我做過實驗,貌似沒什麼區別……

9樓:直接用使用者名稱

不是 是捨棄小數部分

c語言有沒有資料的四捨五入?什麼情況下會用到四捨五入?資料型別轉換?

10樓:匿名使用者

c語言中的float和double型別資料是浮點數,所以小數部分就存在四捨五入問題,當指定輸出位數在精度範圍之內時,系統會自動捨入,無需人工干預,如果小數部分也在精度範圍內,比如10.0/2.0 = 5.

0,2位以上的輸出位數時,後面的都是0,此時,當然不需要捨入了。

資料型別轉換有兩種方式,一種是預設強制轉換,比如將char、short、int、long和float型別資料賦給double型別變數時,編譯程式會自動實施轉換,這是因為,在精度更高時,這樣的轉換是內有損失的。另一種是手動強制型別轉換,比如dnum = (double)inum;,意思是將整形變數inum首先轉換為雙精度資料,然後再付給dnum。當將高精度型別變數賦給低精度型別變數時,除非手動強制轉換,否則,編譯程式會有提示的。

11樓:匿名使用者

資料強制轉換是用捨棄的方法,不會用四捨五入,什麼時候用四捨五入是需要詳細說明的,也就是你的業務需求而定,你可以把數字+0.5,然後進行強制轉換

12樓:匿名使用者

有四捨五入的情況,在你想要保留幾位小數的時候,多餘的緊接著的一位要四捨五入

不過c裡面沒有提供四捨五入的函式,不過你可以這樣a = (int)(a*100 + 0.5)/100這只是乙個小技巧,對a的第三位進行四捨五入

13樓:奧特曼和他老婆

同樣的困惑,期待解答。尤其是當量化的位寬超過32位時,如何來實現截斷,用(int)x 強制轉換時,正數會出錯,但負數正確,不知何解。

14樓:匿名使用者

double強制轉換成int型的時候保留整數部分的。。

比如double a=1.5;

int b=a;

a就是1。

15樓:匿名使用者

浮點運算時,由於精度的問題,涉及到了四捨五入,這也是為什麼乙個很大的數和乙個很小的數相加,會出錯的原因。

但資料型別強制轉換時,是採取的捨棄原則,沒有四捨五入。

c語言資料型別的自動轉換和強制轉換有什麼區別

16樓:學雅思

一、指代不同

1、自動轉換:參與運算量的型別不同,則先轉換成同一型別,然後進行運算。

2、強制轉換:是通過型別轉換運算來實現的。

二、方式不同

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

2、強制轉換:功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。

三、特點不同

1、自動轉換:是在源型別和目標型別相容以及目標型別廣於源型別時發生乙個型別到另一類的轉換。

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

17樓:濺糝埤

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語言中將乙個浮點型賦值給整型時,會不會四捨五入?

18樓:幻翼高達

c語言中將乙個浮點型賦值給整型時,不會四捨五入,會直接捨去小數部分的資料,也可以認為是執行了下取整運算。

將浮點數(單雙精度)轉換為整數時,將捨棄浮點數的小數部分, 只保留整數部分。將整型值賦給浮點型變數,數值不變,只將形式改為浮點形式, 即小數點後帶若干個0。注意:

賦值時的型別轉換實際上是強制的。

例如執行賦值後,無論5.4還是5.6都會變成5。

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

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

強制轉換成指標型別並賦值,關於指標型別強制轉換

因為myntreadmemory和 ulong是乙個層次的資料。如果使用 ulong oldntreadmemory就是將myntreadmemory賦給ulong 型別的指標,指標名字為 oldntreadmemory。但是這個時候myntreadmemory就是把它的值當成位址賦給oldntre...

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

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