浮点字面量
来自cppreference.com
浮点字面量定义值指定于源文件中的编译时常量。
目录 |
[编辑] 语法
| significand exponent(可选) suffix(可选) | |||||||||
其中 significand 拥有下列形式之一
| digit-sequence | (1) | ||||||||
digit-sequence .
|
(2) | ||||||||
digit-sequence(可选) . digit-sequence
|
(3) | ||||||||
0x | 0X hex-digit-sequence
|
(4) | (C++17 起) | |||||||
0x | 0X hex-digit-sequence .
|
(5) | (C++17 起) | |||||||
0x | 0X hex-digit-sequence(可选) . hex-digit-sequence
|
(6) | (C++17 起) | |||||||
1) digit-sequence 表示无小数点的整数,此情况下指数不是可选的: 1e10 、 1e-5L
2) digit-sequence 表示带小数点的整数,此情况下指数是可选的: 1. 、 1.e-2
3) digit-sequence 表示小数。指数是可选的: 3.14 、 .1f 、 0.1e-1L
4) 十六进制 digit-sequence 表示无基底分隔符的整数。对于十六进制浮点字面量指数决不可选: 0x1ffp10 、 0X0p-1
5) 十六进制 digit-sequence 表示带基底分隔符的整数。对于十六进制浮点字面量指数决不可选: 0x1.p0 、 0xf.p-1
6) 十六进制 digit-sequence 表示带基底分隔符的小数。对于十六进制浮点字面量指数决不可选: 0x0.123p-1 、 0xa.bp10l
exponent 拥有下列形式
e | E exponent-sign(可选) digit-sequence
|
(1) | ||||||||
p | P exponent-sign(可选) digit-sequence
|
(2) | (C++17 起) | |||||||
1) 十进制浮点字面量的指数语法
2) 十六进制浮点字面量的指数语法
exponent-sign 若存在则为 + 或 -
suffix 若存在,则为 f 、 F 、 l 或 L 之一。后缀决定浮点字面量的类型:
- (无后缀)定义 double
-
f F定义 float -
l L定义 long double
数位间可插入作为分隔符的单引号( ' ),在编译时忽略它们。 |
(C++14 起) |
[编辑] 解释
使用十进制科学技术记法,表示浮点字面量的值是有效数字乘数 10 的 exponent 次幂。 123e4 的数学含义是 123×104
|
若 significand 以字符序列 对于十六进制浮点常量, significand 被转译成十六进制分数,而指数的 digit-sequence 被转译成有效数字要放大的 2 的幂次。 double d = 0x1.2p3; // 十六进制分数 1.2 (十进制 1.125 )的 2^3 倍,即 9.0 |
(C++17 起) |
[编辑] 示例
运行此代码
#include <iostream> int main() { std::cout << 123.456e-67 << '\n' << .1E4f << '\n' << 58. << '\n' << 4e2 << '\n'; }
输出:
1.23456e-65 1000 58 400
[编辑] 注意
C++17 前十六进制浮点字面量不是 C++ 的一部分,尽管从 C++11 起能通过 I/O 函数分析并打印它们:启用 std::hexfloat 时的 C++ I/O 流和 C I/O 流: std::printf 、 std::scanf 等。格式描述见 std::strtof
[编辑] 参阅
| 浮点常量 的 C 文档
|