Re: [問題] C語言中的 int

看板C_and_CPP作者 (啤酒肚)時間14年前 (2011/04/20 18:29), 編輯推噓6(6018)
留言24則, 9人參與, 最新討論串2/2 (看更多)
※ 引述《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

04/21 02:54, , 1F
x是4, f是2.9f, 沒有人覺得那個 x+3.0 其實可能是誤打
04/21 02:54, 1F

04/21 02:55, , 2F
或原po記錯, 其實可能是 f+3.0 嗎.... 不然再怎樣誤差
04/21 02:55, 2F

04/21 02:55, , 3F
也不至於從7.0誤差成5.9吧....Orz
04/21 02:55, 3F
對 忘了這點 修正下 ※ 編輯: DrStein 來自: 58.115.132.79 (04/21 02:57)

04/21 02:57, , 4F
話說, 寫 3.0f 就像 3L 或 3U 一樣很自然啊....XD
04/21 02:57, 4F

04/21 02:58, , 5F
小弟我比較肚爛常數被寫成像這樣 1000l <- 小L. -_-||
04/21 02:58, 5F

04/21 02:58, , 6F
3L 我第一次看以為是 3*L 三倍L長度,但L又沒定意
04/21 02:58, 6F

04/21 02:59, , 7F
3L這讓我想到小學二年級時,看國中數學課本的感覺:
04/21 02:59, 7F

04/21 03:00, , 8F
嗢 用英文算數學ㄟ,好難喔。
04/21 03:00, 8F
※ 編輯: DrStein 來自: 58.115.132.79 (04/21 03:01)

04/21 08:36, , 9F
抱歉我的 Linux x86-64 int 是 32bits orz
04/21 08:36, 9F

04/21 10:35, , 10F
印象中是看編譯器 不是看OS是幾位元
04/21 10:35, 10F

04/21 10:54, , 11F
int 為了相容, 就算是 64 bit 系統還是都 32bit
04/21 10:54, 11F
※ 編輯: DrStein 來自: 59.120.158.204 (04/21 11:28)

04/21 11:37, , 12F
幾個 byte 是依標準規定, 沒規定才由編譯器各自實作
04/21 11:37, 12F

04/21 11:38, , 13F
而實作時會依不同平台有不同考量
04/21 11:38, 13F

04/21 19:07, , 14F
中文可以學好一點嗎 看這種文章很累
04/21 19:07, 14F

04/21 21:46, , 15F
int 看target... platform分host端和target端
04/21 21:46, 15F

04/21 21:47, , 16F
host就是產出GCC執行檔的那台電腦 target是指 等等編出來
04/21 21:47, 16F

04/21 21:47, , 17F
的"可執行檔" 要在哪個平台跑~ Android整個codebase就是
04/21 21:47, 17F

04/21 21:47, , 18F
這樣分的~
04/21 21:47, 18F

04/21 21:49, , 19F
所以 你可以用 8bits CPU編出64bits的可執行檔
04/21 21:49, 19F

04/22 00:43, , 20F
感謝幫忙解惑 ... 不過我還是有點不懂--x跟++x你解釋
04/22 00:43, 20F

04/22 00:44, , 21F
的地方...為什麼一下子y是3又變成4...x!?!? 感覺不懂
04/22 00:44, 21F

04/22 00:44, , 22F
另外我想知道 ... 有時候在程式碼定義名稱時...
04/22 00:44, 22F

04/22 00:45, , 23F
有些人會在名稱前加上&...例如&PTT...那跟直接打PTT
04/22 00:45, 23F

04/22 00:45, , 24F
有何不同?.. 可以請強者幫我解釋一下嘛??? 謝謝
04/22 00:45, 24F
文章代碼(AID): #1DhoO2ns (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
4
18
完整討論串 (本文為第 2 之 2 篇):
問題
4
18
文章代碼(AID): #1DhoO2ns (C_and_CPP)