發問時間: 電腦與網際網路程式設計 · 10 年前

有關C++語言的入門問題

我想請問一下,

是不是只有long double這種說法

而沒 long float這種?

還有 .. 為什麼2.0f是float

99.44是double

float . double 到底要怎麼分?

我是入門生 . 拜託講淺一點 ~~ 謝謝

已更新項目:

不好意思 , 能否再補充問一下 ?

那 2.34e+007 為甚麼是float呢 ?

是因為看到哪個符號嗎 ?

' \040 ' 為甚麼是char ?

是看到 ' ' 被刮起來都是嗎 ?

另外

dollar$value 為甚麼不是合法的變數?

是因為除了 _ 不能+另外的符號嗎 ?

可否請大大留一下msn 我可能還有一大堆問題

以後會碰到 , 謝謝

4 個解答

評分
  • 其威
    Lv 7
    10 年前
    最佳解答

    在 c 中, 浮點數的型態有

    float = ieee754 單精度浮點數 (32bit)

    double = ieee754 倍精度浮點數 (64bit)

    long double = 要看編譯器, 長度 >= double, 但是不一定. 例如 gcc x86 就提供 96 bit 跟 128 bit 兩種選項.

    沒有 long float 的原因其實也很簡單, 並不是所有型態都可以加上 long 變成另一個形態.

    例如 char = 8bit, 可是沒有 "long char" 這種東西, 因為下一個比 char 長的整數資料型態是 short. 同理, 也沒有 "long short" 這種東西...

    float 也是一樣, 下一個比他長的浮點數資料型態是 double, 就沒有 "long float" 了.

    ===

    字面常數 (literal const) 的浮點數中. 結尾是 f 表示 double, 大寫 L 表示 long double, 沒有結尾表示 double

    3.14f // float

    3.14 // double

    3.14L // long double

    XeY 是科學記數, 表示 X * 10^Y. 其中 Y 的正負符號一定要寫. 例如

    1.23e+45 = 1.23 * 10 ^ 45

    5.43e-21 = 5.43 * 10 ^ -21

    ===

    用單引號 ' 括起來的東西, 會被視為一個字面 char 常數.

    '\040' 之中用了 \ 這個跳脫符號, 後面接的 0 表示接下來是個八進位數字, 如果用'\x20' 就是十六進位了.

    ===

    合法的函式與變數名稱, 必須由

    - 英文字母 (a-z, A-Z)

    - 數字 (0-9)

    - 底線符號 (_)

    組成, $ 不在其中之列.

    2011-02-16 09:02:24 補充:

    在 realview 裡面, long float 是 double 的 "別名":

    http://infocenter.arm.com/help/index.jsp?topic=/co...

    keil 不知道, 沒用他來編 arm binary 過.

    long float 似乎是在 pre-ANSI 以前的東西, 現在已經 invalidated. 即使有, 也是 compiler extension.

    http://www.ericgiguere.com/articles/ansi-c-summary...

  • 10 年前

    一些 ARM用的 compiler 有 long float(,如:Keil C)!

    它就是 double!

    但,個人不建議用!

    要用,就用 double 就好。

    不過,或許在 ARM 中,有它存在的特殊點!

    個人不是那方面的專家。

    在寫 ARM 的程式時,必要還是問一下那方面的專家:

     為何要有 long float?

    若你真的想當 浮點數的專家,要記

     float 是 7.22位有效

     double 是 15.95位有效

    而不是 7 / 16 位。

    那 0.xx位,真的有用!

    如果不想當這方面的專家,就記 7 / 16就夠。

    2.34e+007 是 double,不是 float

  • 10 年前

    double 有效位數實際上應是 15 位數而非 10 位數,long double 的確只有定義所用之 bytes >= double ,關於 floating 有效位數、最大最小值等問題,可以查 limits.h,裡面有詳細定義。

  • momo
    Lv 4
    10 年前

    2.0f或2.0F 後置符號F(f)就是告訴您,這個數是float float有效數字是6位

    99.44 沒加後置符號,它就是double,有效數字是10位

    long double C只保證long double至少和double一樣的精準,也就是至少有效數字10位

    沒聽過long float這個哦

    有效數字是10代表小數後至少10位數字是正確的,6位同理。

還有問題?馬上發問,尋求解答。