VC 中有關float和int的問題

2025-01-02 07:40:19 字數 4311 閱讀 2514

1樓:網友

你可以從彙編檢視器檢視執行步驟:

int a =1; c = a)*(a); 時候。

0040158f mov eax,dword ptr [ebp-4]

00401592 add eax,1

00401595 mov dword ptr [ebp-4],eax

00401598 mov ecx,dword ptr [ebp-4]

0040159b add ecx,1

0040159e mov dword ptr [ebp-4],ecx

004015a1 mov edx,dword ptr [ebp-4]

004015a4 imul edx,dword ptr [ebp-4]

004015a8 mov dword ptr [ebp-8],edx

float a =1; c = a)*(a); 時候。

0040159f fld dword ptr [ebp-4]

004015a2 fadd dword ptr [_real@4@3fff8000000000000000 (0046f020)]

004015a8 fst dword ptr [ebp-4]

004015ab fld dword ptr [ebp-4]

004015ae fadd dword ptr [_real@4@3fff8000000000000000 (0046f020)]

004015b4 fst dword ptr [ebp-4]

004015b7 fmulp st(1),st

004015b9 call __ftol (00420d28)

004015be mov dword ptr [ebp-8],eax

兩者的執行過程不一樣,所以 在用到float 的時候 儘量不要用++運算子,而是再定義中間變數,先用 a+=;這樣就不用出錯。

2樓:網友

這樣的表示式運算的具體步驟跟編譯器有關。

所以只能根據結算結果來解釋過程。

對於第乙個例子。

c=(+a)*(a);

通常的解釋是該語句等價於。

a=a+1;//a=1+1=2

a=a+1;//a=2+1=3

c=a*a;//c=3*3=9

還有些編譯器會等價於。

a=a+1;//a=1+1=2;

int temp1=a;

a=a+1;//a=2+1=3;

int temp2=a;

c=temp1*temp2;//c=2*3=6;

這樣的表示式在實際寫程式的時候是不會用的,因為有歧義。

c語言問題中int和float

3樓:浪子荊

int型是整數,作為結果輸出也只能是整數 如果是個小數,它會自動把小數位拋棄的。。float就可以是小數了。。。

4樓:網友

不是精度的問題,是這一句的原因 s=s+a/b;

int 型的 a/b 得到的是整型;float 型的 a/b 得到的浮點型;

比如說,a = 3,b = 2;

int 型得到的是1,float得到的是;

5樓:門門門

int 跟 float 都是函式型別,int 是基本整形的意思, float是單精度浮點型的意思。

你的問題出在 % 這裡, 你將上面的float a=2,b=1換成int a=2 b=1 再把 % 改成%,其結果就只有2位小數了。 %這個的意思是,你輸出的數字總共佔9位,其中小數部分站6位,所以你輸出的數字小數點後有6個。

如果你想學c語言 或是c程式設計,我介紹你一本很基礎的書譚浩強的祝學習愉快!

6樓:張飛

int和float首先明白其本質是資料型別,何為資料型別,其實其名字就告訴我們,像我們學習時喜歡把整數和小數分開一樣,這裡的int是整數型別,float是浮點數(小數型別)。這不就是倆種資料型別。

那麼為什麼要區分那,主要原因是計算機在儲存資料時分配的記憶體空間是不同的,你定義了int(整型)它就分配對應整型的大小,比如4個記憶體單元。

那麼我為什麼要說比如是4個記憶體單元那,原因是不同的cpu分配記憶體是不一樣的,32位cpu分配的int就是4個位元組,至於為什麼如此,這是硬體設計時決定的(32位/8=4位元組)(不理解跳過)

綜上所述,你應該明白你定義的每乙個變數都會分配一塊記憶體,並且分配記憶體的大小是取決於你的資料型別的。

c++中什麼時候用int,什麼時候用float,兩者有什麼區別

7樓:好程式設計師

float 是浮點型。int 是整型。

1 .單精度浮點型(float)

單精度浮點型(float )專指佔用32位儲存空間的單精度(single-precision )值。單精度在一些處理器上比雙精度更快而且只佔用雙精度一半的空間,但是當值很大或很小的時候,它將變得不精確。當你需要小數部分並且對精度的要求不高時,單精度浮點型的變數是有用的。

例如,當表示美元和分時,單精度浮點型是有用的。

這是一些宣告單精度浮點型變數的例子:float hightemp,lowtemp;

2 .雙精度型(double )浮點型。

雙精度型,正如它的關鍵字"double "表示的,佔用64位的儲存空間。在一些現代的被優化用來進行高速數學計算的處理器上雙精度型實際上比單精度的快。所有超出人類經驗的數學函式,如sin( )cos( )tan()和sqrt( )均返回雙精度的值。

當你需要保持多次反覆迭代的計算的精確性時,或在操作值很大的數字時,雙精度型是最好的選擇。

整型值可以用十進位,十六進位或八進位符號指定,前面可以加上可選的符號(- 或者 +)

如果用八進位符號,數字前必須加上 0(零),用十六進位符號數字前必須加上 0x。

8樓:人生做回自己

你好!int用於定義乙個整型變數。

float定義浮點型別的變數,如:int i=3;

float f=;

都是c裡的基本型別,c在處理不同型別的變數時格式化等方面都有區別,不同型別轉換也有相應的規則。

9樓:bai馬

當你用整數是用int,用小數點是用float

10樓:初出茅廬的

乙個是整型,乙個是實型。

c語言資料int和float的問題。。

11樓:網友

float在記憶體裡也是4個位元組這四個位元組和int的那種指定是不一樣的 雖然都是0和1 但是指定有某些位是表示點的位置的 某些位是表示是多少次方的,這些都可能是硬性規定的,所以就實現了你說的這種情況被 舉個例子 都是1個位元組8位 如果前面5位都表示數 後面3位 標示數的指定沒有表示次方的範圍大啊,我也是感覺是這樣,具體是不是真這樣實現 不確定。

你也說了float比int精度大麼,在不要求經度的時候int比float的範圍廣,大多數情況下有小數點的情況還是少的,int用的多啊,也就是說大多數情況下是不需要精度的,在不需要的情況下非用幾位表示冪指數,用幾位表示小數點的位置不是很浪費麼,這個就好比unsigned int 和int的區別是的,很多時候不是int就不能替代unsigned int 在0的時候他們是等價的 ,但是int的範圍就小了一半啊,所以大於0的情況下 我就總用unsigned了。

下面這個是我在網上找的 你看看。

型別 儲存位數 總位數 偏移值(offset) 數符(s) 階碼(e) 尾數(m)

短實數(float) 1 8 23 32 127

長實數(double) 1 11 52 64 1023

n (10) = ,換算成二進位表示:

n (2) = 1111011. 01110100101111001

那麼e – 127 = 6; e = 127 + 6 = 133(10) = 10000101(2)

m = 111 0110 1110 1001 0111 1001 (省略了最高數字位1, 共23bit)

組合起來就是:s e m

4bit一間隔:

4 2 f 6 e 9 7 9

12樓:網友

這樣子來講:float和int都是固定長度的,4位元組(32位機子)int是精確的,超出範圍就溢位了。資料錯誤了。

二float並不是單純的101010這樣儲存,是把4個位元組劃分為符號位,指數位,尾數位。

3個部分固定的,因為有指數,儲存的範圍當然比int大了。

但是3個部分也有範圍限制,所以當你精度值越大時,月不精確了。

13樓:網友

他們表示數的方法不同。

int 和int的區別, int 4 和 int 4 的區別?

int p 4 定義一bai個指du針陣列 zhi,該陣列中每個元素是乙個指標,每dao個指標指向 就內需要程式容中後續再定義了。int p 4 定義乙個陣列指標,該指標指向含4個元素的一維陣列 陣列中每個元素是int型 區分int p n 和int p n 就要看運算子的優先順序了。int p n...

double和float的區別,java float和double的區別

對程式設計人員來說,double 和 float 的區別是double精度高,有效數字16位,float精度7位。但double消耗記憶體是float的兩倍,double的運算速度比float慢得多,c語言中數學函式名稱double 和 float不同,不要寫錯,能用單精度時不要用雙精度 以省記憶體...

C 中關於float和double的小問題

寫常數時 19 3 5 這樣寫就是int 4.0 3.14 這樣寫就是double 4.0f 3.14f 這樣寫就是float 運算時,低精度的會自動向高精度轉換,比如有double時,int和float都會轉換成double,你那個表示式中sqrt 返回乙個double,所以其他int都轉成了do...