看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《dream0127uk (TCK)》之銘言: : 各位好 ... 又有個問題想來請教各位了 : 老師今天說到 int ... 也是個很困惑的狀況下 : int x = 4, : float f = 2.9f, : x int 4 : x+f float 6.9f : x+3.0 double 5.9 : 3L + f float 5.9f : 3L + (int)f long 5L : 我不知道什麼時候是 int, float, double, long ... 有什麼不一樣? int 整數是也 在X位元 "作業系統"下 範圍為 -2^(X-1) ~ 2^(X-1) long 也是整數 但不論幾位元,範圍都為 -2^(32-1) ~ 2^(32-1) 所以在32位的情況下,int = long float : 用 32位,既四個字節,去存一個實數。 double : 用64位,既八個字節去存一個實數,想也知道存的更準, 但更耗礎存空間。 : 關於數字部分 ... 我不懂 為什麼 x + 3.0 會變成5.9f : 整個開始有點困惑 ... 我知道要問老師... : 但是這老師 ... 讓我很寒心-.- 我也不知道,怪怪的。 該是 6.99999xx.... 吧. 這是因為雙精度的"實數" (為何叫浮點,是因為他小數點, 放的位置是可以浮動的,反過來不能動的叫定點) 在電腦中,為二進位表式:會把些十進位可以清易表達的數字 需用循還小數才可精確表答,但位數又有限。。 所以就失精度嚕。 個人不喜歡寫成什麼 3.0f這種怪樣子。 謝成 (float)3 或乾脆就寫3.0 個人以為比較直覺。 : 另外他今天又有提到什麼 - - x 還有 + + x 或者 x + + : 如果 int x = 3 : 那有什麼不一樣的狀況會發生? 我連google找文章來看都不知道要怎麼找 : 請各位幫忙我解惑一下吧! 感謝... int x = 3; int y; /*現在 x是 3, y是另個空格*/ y = x++; /*這動作是兩步 後制是說等其他做完再做這動作: 所以是: y = x; x = x+ 1; 所以 y 是 3,然後 x = 4*/ /*清回讓 x = 3*/ x = 3; y = ++x; /*這動作也是兩步 : 前置是說,先幹這事,再作其他的 所以是 x = x + 1; y = x; 最終 x = 4; y = 4; */ 不過個人還是喜歡把這種運算單獨放。 好比只有x++ 或 --y; 同行還有其他運算 看了很累。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.132.79
VictorTom:x是4, f是2.9f, 沒有人覺得那個 x+3.0 其實可能是誤打 04/21 02:54
VictorTom:或原po記錯, 其實可能是 f+3.0 嗎.... 不然再怎樣誤差 04/21 02:55
VictorTom:也不至於從7.0誤差成5.9吧....Orz 04/21 02:55
對 忘了這點 修正下 ※ 編輯: DrStein 來自: 58.115.132.79 (04/21 02:57)
VictorTom:話說, 寫 3.0f 就像 3L 或 3U 一樣很自然啊....XD 04/21 02:57
VictorTom:小弟我比較肚爛常數被寫成像這樣 1000l <- 小L. -_-|| 04/21 02:58
DrStein:3L 我第一次看以為是 3*L 三倍L長度,但L又沒定意 04/21 02:58
DrStein:3L這讓我想到小學二年級時,看國中數學課本的感覺: 04/21 02:59
DrStein:嗢 用英文算數學ㄟ,好難喔。 04/21 03:00
※ 編輯: DrStein 來自: 58.115.132.79 (04/21 03:01)
Bencrie:抱歉我的 Linux x86-64 int 是 32bits orz 04/21 08:36
bdvstg:印象中是看編譯器 不是看OS是幾位元 04/21 10:35
Ebergies:int 為了相容, 就算是 64 bit 系統還是都 32bit 04/21 10:54
※ 編輯: DrStein 來自: 59.120.158.204 (04/21 11:28)
loveme00835:幾個 byte 是依標準規定, 沒規定才由編譯器各自實作 04/21 11:37
loveme00835:而實作時會依不同平台有不同考量 04/21 11:38
wfgh:中文可以學好一點嗎 看這種文章很累 04/21 19:07
softwind:int 看target... platform分host端和target端 04/21 21:46
softwind:host就是產出GCC執行檔的那台電腦 target是指 等等編出來 04/21 21:47
softwind:的"可執行檔" 要在哪個平台跑~ Android整個codebase就是 04/21 21:47
softwind:這樣分的~ 04/21 21:47
softwind:所以 你可以用 8bits CPU編出64bits的可執行檔 04/21 21:49
dream0127uk:感謝幫忙解惑 ... 不過我還是有點不懂--x跟++x你解釋 04/22 00:43
dream0127uk:的地方...為什麼一下子y是3又變成4...x!?!? 感覺不懂 04/22 00:44
dream0127uk:另外我想知道 ... 有時候在程式碼定義名稱時... 04/22 00:44
dream0127uk:有些人會在名稱前加上&...例如&PTT...那跟直接打PTT 04/22 00:45
dream0127uk:有何不同?.. 可以請強者幫我解釋一下嘛??? 謝謝 04/22 00:45