我還沒有買書,大概 明/後天會去買書。

還有,我們必須設定 共同使用的標準環境,

有沒有建議使用的 compiler?

我比較習慣使用 VC++ 6.0

 

創作者介紹
創作者 yangyc 的頭像
yangyc

C++ Primer 問題討論

a2dn157 發表在 痞客邦 留言(10) 人氣()


留言列表 (10)

發表留言
  • yangyc
  • 其實我書已經大略看完了,只是未做練習題。

    這本書所描述的是標準的C++語法及STL,因此用任何一種較新版本的compiler都沒有問題。況且不是聯合開發同一系統,因此編譯器不統一並不影響程式的結果,所以依個人習慣使用吧。

    不過VC++ 6.0的compiler實在有點舊了,我以前試過有些較新的template語法無法編譯通過,因此不是很建議使用。基本上Visual Studio .Net 2003以後的任何一版應該都可以。另外我個人慣用的compiler是GNU Compiler。
  • yangyc
  • 嗯...用google groups也許也是個好方法,而且普及性也更高,現在應該很少人沒有Gmail了。不然能麻煩你建一個嗎? 我的帳號是yangycgmail .com
  • yangyc
  • 對了, 先回答你在
    http://sjgau.javaeye.com/?show_full=true
    的問題吧 (我不確定那個是不是你)

    如果你已經知道2補數的概念,這個修改過的例子可以讓你想得更清楚
    int main() {
    int n1, MAX_32_INT;
    unsigned long n2, n3, MAX_64_ULONG;

    n1 = (int)50000*(int)50001;
    n2 = (unsigned long)50000*(unsigned long)50001;
    n3 = 50000*50001;

    MAX_32_INT = 0x7fffffff;
    MAX_64_ULONG = 0xffffffffffffffff;

    cout << MAX_32_INT << endl
    << MAX_64_ULONG << endl << endl;

    cout << n1 << endl
    << n2 << endl
    << n3 << endl;
    return 0;
    }
  • yangyc
  • n3的結果與n2不同, 原因是, n3的算式可拆解如下:
    (1) 無名int變數a:50000, 乘上無名int變數b:50001, 結果放入無名int變數c中, 由於overflow導致結果變成負的。
    (2) 無名int變數c的值被複製到unsigned int n3, 此時無名變數c的sign bit被擴展, 導致n3的前32bits皆變成1
    (3) n3得到前32bits是1, 後32bits和無名int變數c的值相同的結果
  • yangyc
  • 上述的第二點打錯字 是unsigned long n3
  • a2dn157
  • 謝謝 回覆

    我使用 整數的 over-flow 和 浮點數的 有限的精確度來警惕 初學者,

    寫程式 一定要 非常小心,避免 犯錯。
  • a2dn157
  • 我不喜歡 發表迴響,
    或是發表文章的 驗證機制。
    往往必須 很用力的看,
    還是 看不清楚那些 文數字,很累!