[問題] float (加減乘除) int 問題

看板C_and_CPP作者 (神手)時間10年前 (2014/04/20 15:36), 10年前編輯推噓7(708)
留言15則, 5人參與, 最新討論串1/2 (看更多)
小弟我再進行C++測試時遇到一點小問題 [問題1:Type checking概念] 測試1: int a 10 ; float b = 2.5 ; b = a + b ; printf( "%f", b ) ; 印出值為:12.5 << 因為會發生型別轉換 測試2: int a = 10 ; float b = 2.5 ; b = a / 3 ; printf( "%f", b ) ; 印出值為:3 << 沒有轉換 應該要是3.33333 需要改成b = (float)a / 3 才能印出正確的值 為什麼測試1的不需要就能印出正確的值?????? ----------------------------------------------------- [問題2:宣告] char a[50] ; // call stack char b = new char[50] // call heap 基本上這兩種是一樣的東西 只是存放在stack 跟 heap 的差別 但是這個差別 在甚麼情況 會really makes a difference ???? 這問題困擾我好久 請高手解答 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.135.236.242 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1397979369.A.38D.html

04/20 15:37, , 1F
因為a和3型態都是int,兩個int運算自然只會回傳int值
04/20 15:37, 1F
我了解了 所以type checking是發生在"+"符號時 進行轉換 如果同樣型別 就不轉換 ※ 編輯: SuperMaster (140.135.236.242), 04/20/2014 15:45:03

04/20 15:44, , 2F
問題2: (1) heap可以分配較大的陣列, 例如把50改成500萬
04/20 15:44, 2F
char b 更正為 char * b 那假設以固定設為50 在程式運作過程 會有不同的地方嗎 ※ 編輯: SuperMaster (140.135.236.242), 04/20/2014 15:46:46

04/20 15:46, , 3F
stack 通常會爆炸, heap 不會. (2) 當陣列大小是執行時才
04/20 15:46, 3F

04/20 15:47, , 4F
確定時, 只能用 new[]
04/20 15:47, 4F

04/20 15:47, , 5F
(3) new 出來的需要 delete
04/20 15:47, 5F

04/20 16:00, , 6F
把測試2的3改成3.0即可,這樣就跟測試1的環境一樣了
04/20 16:00, 6F
沒錯 3變成3.0<< float 這樣程式碰到int/float 就會進行轉換 對吧!

04/20 23:47, , 7F
測試1,我覺得不太是型別轉換,你指定b=a+b,就是a+b
04/20 23:47, 7F

04/20 23:48, , 8F
值再指定給b 而已啊測試2,float b;跟你下一行 b =a/3
04/20 23:48, 8F

04/20 23:48, , 9F
也沒什麼關係,你設 float a =10;float b=0;b=a/3這
04/20 23:48, 9F

04/20 23:48, , 10F
樣就是你要的答案了吧!
04/20 23:48, 10F
摁摁我知道 但我想知道程式在系統內是怎麼運作的 '+'號 在我們所知就是一般的加號 但是對程式來說'+'不單單是加號的意思 一但遇到 float + int 與 int + int 雖然都是'+' 在在內部運作是完全不一樣的 我記得這好像是operator overloading的觀念 如有錯誤 請多指教~

04/21 01:59, , 11F
看不太懂樓上的意思
04/21 01:59, 11F
※ 編輯: SuperMaster (36.230.214.120), 04/21/2014 11:56:14

04/21 13:08, , 12F
不要怕,我也是新手,推推自己的想法而已,喵喵
04/21 13:08, 12F

04/22 10:50, , 13F
compiler在處理運算子時會檢查兩邊的型別,不一致的話會
04/22 10:50, 13F

04/22 10:51, , 14F
會加上型別轉換,就是這樣
04/22 10:51, 14F

04/22 10:53, , 15F
在C裡面+就是+,cpp 才有operator overloading的概念
04/22 10:53, 15F
文章代碼(AID): #1JKtZfED (C_and_CPP)
文章代碼(AID): #1JKtZfED (C_and_CPP)