C# 7.0 核心技术指南 (22):C#语言基础 2.4.1

阅读数:9 2019 年 11 月 30 日 23:37

C# 7.0核心技术指南(22):C#语言基础 2.4.1

(数值字面量)

内容简介
本书前三章将集中介绍 C#语言。首先介绍基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。如果你是 C#语言的初学者,请循序渐进地阅读这些章节。
其余各章则涵盖了.NET Framework 的核心功能,包括 LINQ、XML、集合、并发、I/O 和网络、内存管理、反射、动态编程、特性、安全、应用程序域和原生互操作性等主题。第 6 章和第 7 章是后续主题的基础,除这两章之外,其余各章可以按照需要以任何顺序阅读。LINQ 相关的三个章节好按顺序阅读。其中的一些章节需要一些并发相关的知识,这些知识将在第 14 章中介绍。

整数类型字面量可以使用十进制或者十六进制表示。十六进制辅以 0x 前缀。例如:

复制代码
int x = 127;
long y = 0x7F;

从 C# 7 开始,可以在数值字面量的任意位置加入下划线以方便阅读:

复制代码
int million = 1_000_000;

C# 7 还可以用 0b 前缀使用二进制表示数值:

复制代码
var b = 0b1010_1011_1100_1101_1110_1111;

实数字面量可以用小数或指数表示,例如:

复制代码
double d = 1.5;
double million = 1E06;

2.4.1.1 数值字面量类型接口

默认情况下,编译器将数值字面量推断为 double 类型或是整数类型。

  • 如果这个字面量包含小数点或者指数符号(E),那么它是 double。
  • 否则,这个字面量的类型就是下列能满足这个字面量的第一个类型:int、uint、long 和 ulong。

例如:

复制代码
Console.WriteLine ( 1.0.GetType()); // Double (double)
Console.WriteLine ( 1E06.GetType()); // Double (double)
Console.WriteLine ( 1.GetType()); // Int32 (int)
Console.WriteLine ( 0xF0000000.GetType()); // UInt32 (uint)
Console.WriteLine (0x100000000.GetType()); // Int64 (long)

2.4.1.2 数值后缀

数值后缀显式定义了字面量的类型。后缀可以是下列小写或大写字母:

种类 C#类型 例子
F float float f = 1.0F;
D double double d = 1D;
M decimal decimal d = 1.0M;
U uint uint i = 1U;
L long long i = 1L;
UL ulong ulong i = 1UL;

一般 U 和 L 后缀是很少需要的。因为 uint、long 和 ulong 总是可以推断出来或者从 int 类型隐式转换过来:

复制代码
long i = 5; // Implicit lossless conversion from int literal to long

从技术上讲,后缀 D 是多余的。因为所有带小数点的字面量都会推定为 double 类型。因此可以直接在数值字面量后加上小数点:

复制代码
double x = 4.0;

后缀 F 和 M 是最有用的,并应该在指定 float 或 decimal 字面量时使用。下面的语句不能在没有后缀 F 时进行编译。这是因为 4.5 会认定为 double 而 double 是无法隐式转换为 float 的:

复制代码
float f = 4.5F;

同样的规则也适用于 decimal 字面量:

复制代码
decimal d = -1.23M; // Will not compile without the M suffix.

我们将在下一节详细介绍数值转换的语义。

C# 7.0核心技术指南(22):C#语言基础 2.4.1

购书地址 https://item.jd.com/12681788.html?dist=jd

评论

发布