Swift 开发指南:Numeric Literals
- 1. 整数字面量(Integer Literals)
- 表示方法
- 总结
- 2. 浮点数字面量(Floating-point Literals)
- 表示方法
- 指数的含义
- 总结
- 3. 数字字面量的格式化
- 常见格式化方式
- 总结
- 4. 示例代码总结
- 5. 扩展知识
- 5.1 数字类型的自动推断
- 5.2 类型转换
- 5.3 数字类型的边界值
- 5.4 特殊数字值
- 6. 总结
今天学习下 Swift 中的数字字面量(Numeric Literals),包括整数和浮点数的不同表示方法以及如何通过格式化提升可读性
1. 整数字面量(Integer Literals)
在 Swift 中,整数可以用多种进制表示:
表示方法
-
十进制(Decimal):不需要任何前缀,直接写数字。
swift">let decimalInteger = 17 // 十进制的 17
-
二进制(Binary):前缀为
0b
。swift">let binaryInteger = 0b10001 // 二进制的 10001,等于十进制 17
-
八进制(Octal):前缀为
0o
。swift">let octalInteger = 0o21 // 八进制的 21,等于十进制 17
-
十六进制(Hexadecimal):前缀为
0x
。swift">let hexadecimalInteger = 0x11 // 十六进制的 11,等于十进制 17
总结
- 通过不同的前缀,Swift 允许以多种进制来书写整数。
- 但无论是哪种进制表示,底层存储的数值是一样的。
2. 浮点数字面量(Floating-point Literals)
表示方法
浮点数可以用 十进制 或 十六进制 表示。
-
十进制浮点数(Decimal Float)
- 没有前缀。
- 小数点左右必须有数字。
- 可以带有指数(exponent),用
e
或E
表示。swift">let decimalDouble = 12.1875 // 普通的十进制浮点数 let exponentDouble = 1.21875e1 // 1.21875 x 10¹ = 12.1875
-
十六进制浮点数(Hexadecimal Float)
- 前缀为
0x
。 - 小数点左右必须有数字。
- 指数用
p
或P
表示,表示以 2 为底的幂(exponent)。swift">let hexadecimalDouble = 0xC.3p0 // (12 + 3/16) x 2⁰ = 12.1875
- 前缀为
指数的含义
-
十进制指数(e 或 E): 指数表示以 10 为底数的幂。
swift">1.25e2 // 等于 1.25 x 10² = 125.0 1.25e-2 // 等于 1.25 x 10⁻² = 0.0125
-
十六进制指数(p 或 P): 指数表示以 2 为底数的幂。
swift">0xFp2 // 等于 15 x 2² = 60.0 0xFp-2 // 等于 15 x 2⁻² = 3.75
总结
- 浮点数支持十进制和十六进制两种表示方法。
- 指数形式的浮点数表示乘以底数的幂。
3. 数字字面量的格式化
Swift 允许在数字字面量中添加额外的格式,使代码更易于阅读。这些格式化不会影响数值本身。
常见格式化方式
-
补零(Padding with Zeros):
- 数字可以用
0
填充,但这不会影响值。
swift">let paddedDouble = 000123.456 // 等于 123.456
- 数字可以用
-
下划线(Underscores for Readability):
- 下划线可以用来分隔数字,使其更易读。
swift">let oneMillion = 1_000_000 // 等于 1000000 let justOverOneMillion = 1_000_000.000_000_1 // 等于 1000000.0000001
总结
- 格式化(如下划线)只用于提高代码可读性,对实际值没有影响。
- 推荐习惯: 在书写较大的数字时,可以使用下划线分隔数字(如千分位),提升代码的可读性。
4. 示例代码总结
swift">// 整数字面量
let decimalInteger = 17
let binaryInteger = 0b10001 // 二进制
let octalInteger = 0o21 // 八进制
let hexadecimalInteger = 0x11 // 十六进制// 浮点数字面量
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1 // 带指数的十进制浮点数
let hexadecimalDouble = 0xC.3p0 // 带指数的十六进制浮点数// 格式化数字
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
5. 扩展知识
5.1 数字类型的自动推断
Swift 会根据上下文自动推断数字字面量的类型:
-
如果没有指定类型,整数默认为
Int
,浮点数默认为Double
。swift">let number = 42 // 推断为 Int let floatingNumber = 3.14 // 推断为 Double
-
你也可以显式指定类型:
swift">let explicitInteger: UInt8 = 255 // 指定无符号 8 位整数 let explicitFloat: Float = 3.14 // 指定单精度浮点数
5.2 类型转换
Swift 是类型安全的语言,不会隐式转换不同类型的数字,因此需要显式转换:
swift">let intValue: Int = 10
let doubleValue: Double = 3.14
let result = Double(intValue) + doubleValue // 需要显式转换
5.3 数字类型的边界值
Swift 提供了不同整数和浮点数类型的最小值和最大值:
swift">let maxInt = Int.max // Int 类型的最大值
let minInt = Int.min // Int 类型的最小值
5.4 特殊数字值
NaN
(Not a Number): 表示无法定义的数字结果。infinity
: 表示正无穷或负无穷。swift">let nanValue = Double.nan let infinityValue = Double.infinity
6. 总结
- Swift 提供了丰富的数字字面量支持,包括十进制、二进制、八进制和十六进制。
- 浮点数支持十进制指数和十六进制指数,便于表示科学计数法。
- 数字字面量的格式化(如下划线)提升了代码可读性。
- Swift 的类型推断和类型安全特性确保了代码的可靠性。