Swift 开发指南:数字字面量(Numeric Literals)

server/2025/1/11 2:32:47/

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 中,整数可以用多种进制表示:

表示方法

  1. 十进制(Decimal):不需要任何前缀,直接写数字。

    swift">let decimalInteger = 17 // 十进制的 17
    
  2. 二进制(Binary):前缀为 0b

    swift">let binaryInteger = 0b10001 // 二进制的 10001,等于十进制 17
    
  3. 八进制(Octal):前缀为 0o

    swift">let octalInteger = 0o21 // 八进制的 21,等于十进制 17
    
  4. 十六进制(Hexadecimal):前缀为 0x

    swift">let hexadecimalInteger = 0x11 // 十六进制的 11,等于十进制 17
    

总结

  • 通过不同的前缀,Swift 允许以多种进制来书写整数。
  • 但无论是哪种进制表示,底层存储的数值是一样的。

2. 浮点数字面量(Floating-point Literals)

表示方法

浮点数可以用 十进制十六进制 表示。

  1. 十进制浮点数(Decimal Float)

    • 没有前缀。
    • 小数点左右必须有数字。
    • 可以带有指数(exponent),用 eE 表示。
      swift">let decimalDouble = 12.1875 // 普通的十进制浮点数
      let exponentDouble = 1.21875e1 // 1.21875 x 10¹ = 12.1875
      
  2. 十六进制浮点数(Hexadecimal Float)

    • 前缀为 0x
    • 小数点左右必须有数字。
    • 指数用 pP 表示,表示以 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 允许在数字字面量中添加额外的格式,使代码更易于阅读。这些格式化不会影响数值本身。

常见格式化方式

  1. 补零(Padding with Zeros):

    • 数字可以用 0 填充,但这不会影响值。
    swift">let paddedDouble = 000123.456 // 等于 123.456
    
  2. 下划线(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 的类型推断和类型安全特性确保了代码的可靠性。

http://www.ppmy.cn/server/157350.html

相关文章

python_excel列表单元格字符合并、填充、复制操作

读取指定sheet页,根据规则合并指定列,填充特定字符,删除多余的列,每行复制四次,最后写入新的文件中。 import pandas as pd""" 读取指定sheet页,根据规则合并指定列,填充特定字…

八爪鱼数据采集工具实战教程:自动化获取与数据

2025年1月9日 一、学习目标 1.了解数据采集的基本流程和几种常见数据采集方法; 2.实操通过八爪鱼采集工具进行数据采集。 二、知识准备 数据是产生价值的原材料,也是进行数据分析的第一步。获取数据的方式是多种多样的&#x…

本地系统A与云平台B数据对接demo演示

.一、云平台B提供工程类库【.net工程类库,直接调用】 本地系统A-本地电脑调用,电脑连接互联网 云平台B-互联网云平台-提供cs文件,接口文档。 1.c#类库 2.控制台或winform直接调用c#类库; 3.云平台B输出【c#源文件】 4.cs文件端…

头歌python实验:网络安全应用实践-恶意流量检测

第1关:re 库的使用 本关任务:编写一个能正则匹配出 ip 地址的小程序。 re 的主要功能函数 常用的功能函数包括: compile、search、match、split、findall(finditer)、sub(subn)。 re.search 函数 re.search 扫描整个字符串并返回第一个成功的匹配。 函数语法: re…

jenkins入门6 --拉取代码

Jenkins代码拉取 需要的插件,缺少的安装下 新建一个item,选择freestyle project 源码管理配置如下:需要添加git库地址,和登录git的用户密码 配置好后执行编译,成功后拉取的代码在工作空间里

爬虫基础之爬取某基金网站+数据分析

声明: 本案例仅供学习参考使用,任何不法的活动均与本作者无关 网站:天天基金网(1234567.com.cn) --首批独立基金销售机构-- 东方财富网旗下基金平台! 本案例所需要的模块: 1.requests 2.re(内置) 3.pandas 4.pyecharts 其他均需要 p…

nginx反向代理和负载均衡的区别

1、反向代理,不需要服务器池,直接代理某台服务器 location / {proxy_pass http://192.168.18.201;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr; }proxy_set_header Host $host; …

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

目录 ./real.exe错误1:ERROR while reading namelist physics./wrf.exe错误1:FATAL CALLED FROM FILE: <stdin> LINE: 2419 Warning: too many input landuse types参考./real.exe 错误1:ERROR while reading namelist physics 执行./real.exe时,报错如下: taski…