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

news2025/1/11 10:54:43

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):不需要任何前缀,直接写数字。

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

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

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

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

总结

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

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

表示方法

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

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

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

    • 前缀为 0x
    • 小数点左右必须有数字。
    • 指数用 pP 表示,表示以 2 为底的幂(exponent)。
      let hexadecimalDouble = 0xC.3p0 // (12 + 3/16) x 2⁰ = 12.1875
      

指数的含义

  • 十进制指数(e 或 E): 指数表示以 10 为底数的幂。

    1.25e2 // 等于 1.25 x 10² = 125.0
    1.25e-2 // 等于 1.25 x 10⁻² = 0.0125
    
  • 十六进制指数(p 或 P): 指数表示以 2 为底数的幂。

    0xFp2 // 等于 15 x 2² = 60.0
    0xFp-2 // 等于 15 x 2⁻² = 3.75
    

总结

  • 浮点数支持十进制和十六进制两种表示方法。
  • 指数形式的浮点数表示乘以底数的幂。

3. 数字字面量的格式化

Swift 允许在数字字面量中添加额外的格式,使代码更易于阅读。这些格式化不会影响数值本身。

常见格式化方式

  1. 补零(Padding with Zeros):

    • 数字可以用 0 填充,但这不会影响值。
    let paddedDouble = 000123.456 // 等于 123.456
    
  2. 下划线(Underscores for Readability):

    • 下划线可以用来分隔数字,使其更易读。
    let oneMillion = 1_000_000 // 等于 1000000
    let justOverOneMillion = 1_000_000.000_000_1 // 等于 1000000.0000001
    

总结

  • 格式化(如下划线)只用于提高代码可读性,对实际值没有影响。
  • 推荐习惯: 在书写较大的数字时,可以使用下划线分隔数字(如千分位),提升代码的可读性。

4. 示例代码总结

// 整数字面量
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

    let number = 42          // 推断为 Int
    let floatingNumber = 3.14 // 推断为 Double
    
  • 你也可以显式指定类型:

    let explicitInteger: UInt8 = 255 // 指定无符号 8 位整数
    let explicitFloat: Float = 3.14  // 指定单精度浮点数
    

5.2 类型转换

Swift 是类型安全的语言,不会隐式转换不同类型的数字,因此需要显式转换:

let intValue: Int = 10
let doubleValue: Double = 3.14
let result = Double(intValue) + doubleValue // 需要显式转换

5.3 数字类型的边界值

Swift 提供了不同整数和浮点数类型的最小值和最大值:

let maxInt = Int.max  // Int 类型的最大值
let minInt = Int.min  // Int 类型的最小值

5.4 特殊数字值

  • NaN(Not a Number): 表示无法定义的数字结果。
  • infinity 表示正无穷或负无穷。
    let nanValue = Double.nan
    let infinityValue = Double.infinity
    

6. 总结

  • Swift 提供了丰富的数字字面量支持,包括十进制、二进制、八进制和十六进制。
  • 浮点数支持十进制指数和十六进制指数,便于表示科学计数法。
  • 数字字面量的格式化(如下划线)提升了代码可读性。
  • Swift 的类型推断和类型安全特性确保了代码的可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式 行为型 责任链模式(Chain of Responsibility Pattern)与 常见技术框架应用 解析

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许将请求沿着处理者链进行发送。每个处理者对象都有机会处理该请求,直到某个处理者决定处理该请求为止。这种模式的主要目的是避免请求的发送者和接收者之间…

VS2022如何修改我们新建工程打开新建文件中,默认输入我们的main函数和宏定义

1.右击我们的VS环境,选择【打开文件位置】 2. 进入C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE 目录 进入【VC】文件夹 进入【VCProjectItems】文件夹 3. 修改newcfile.cpp文件 右击选择【打开方式】选择【记事本】 添加如下内容 #defi…

2025-1-10-sklearn学习(36、37) 数据集转换-无监督降维+随机投影 沙上并禽池上暝。云破月来花弄影。

文章目录 sklearn学习(36、37) 数据集转换-无监督降维随机投影sklearn学习(36) 数据集转换-无监督降维36.1 PCA: 主成份分析36.2 随机投影36.3 特征聚集 sklearn学习(37) 数据集转换-随机投影37.1 Johnson-Lindenstrauss 辅助定理37.2 高斯随机投影37.3 稀疏随机矩阵 sklearn学…

openssl编译

关于windows下,openssl编译 环境准备 安装 perl:https://djvniu.jb51.net/200906/tools/ActivePerl5_64.rar安装nasm:https://www.nasm.us/pub/nasm/releasebuilds/2.13.01/win64/nasm-2.13.01-installer-x64.exe下载opensll源码:https://o…

2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉

文章目录 1. 导入QXlsx库2. 使用 QXlsx库 读取 .xlsx 文件小结 网上有很多教程,但太费劲了,这里有个非常简便的好方法,分享给大家。 1. 导入QXlsx库 转载链接 :https://github.com/QtExcel/QXlsx/blob/master/HowToSetProject.md…

先辑芯片HPM5300系列之SEI多摩川协议命令表问题研究

多摩川协议有9条命令,但是先辑SEI的命令表只有8张。0-6是可用的,第7张是黑洞表,所以只有7张可用。 命令表的限制颇多,比如命令表只能按顺序使用 :例如0、1、3,那么命令表3是不能用的。 如果想要实现9个命令…

kotlin项目无法访问Java类的问题

使用IntelliJ创建一个Kotlin项目,然后在src/main/kotlin中创建一个java接口:Animal.java,然后在Main.kt中打印这个java接口,如下: fun main() {println(Animal::class.java) }代码在编辑器中并没有报错,但…

全栈面试(一)Basic/微服务

文章目录 项目地址一、Basic InterviewQuestions1. tell me about yourself?2. tell me about a time when you had to solve a complex code problem?3. tell me a situation that you persuade someone at work?4. tell me a about a confict with a teammate and how you…

医疗可视化大屏 UI 设计新风向

智能化交互 借助人工智能与机器学习技术,实现更智能的交互功能。如通过语音指令或手势控制来操作大屏,医护人员无需手动输入,可更便捷地获取和处理信息。同时,系统能根据用户的操作习惯和数据分析,自动推荐相关的医疗…

Angular由一个bug说起之十三:Cross Origin

跨域 想要了解跨域,首要要了解源 什么是源,源等于协议加域名加端口号 只有这三个都相同,才是同源,反之则是非同源。 比如下面这四个里,只有第4个是同源 而浏览器给服务器发送请求时,他们的源一样&#xff0…

【LeetCode Hot100 贪心算法】 买卖股票的最佳时机、跳跃游戏、划分字母区间

贪心算法 买卖股票的最佳时机买卖股票的最佳时机II跳跃游戏跳跃游戏II划分字母区间 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的…

MCANet: 基于多模态字幕感知的大语言模型训练无关视频异常检测

目录 摘要01 引言02 相关工作2.1 视频异常检测2.2 基于视频的大语言模型(VLLMs) 03 方法论3.1 问题定义3.2 MCANet3.3 图像字幕分支3.4 音频字幕分支3.5 基于LLM的异常评分3.6 视频-文本分数优化 04 实验4.1 数据集和评估指标4.2 实现细节4.3 定性结果4.…

为深度学习引入张量

为深度学习引入张量 什么是张量? 神经网络中的输入、输出和转换都是使用张量表示的,因此,神经网络编程大量使用张量。 张量是神经网络使用的主要数据结构。 张量的概念是其他更具体概念的数学概括。让我们看看一些张量的具体实例。 张量…

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件,支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境,可以在网页、小程序等平台中使用。 源码 https:…

[DO374] Ansible 配置文件

[DO374] Ansible 配置文件 1. 配置文件位置2. 配置文件3. Ansible 配置4. Ansible的Ad-hoc5. Ansible 模块6. playbook段落7. 任务执行后续8. Ansible 变量8.1 ansible 变量的定义8.1.1 主机变量8.1.2 主机组变量 8.2 vars的循环 9. Ansible Collection10. Ansible-galaxy 安装…

[程序设计]—代理模式

[程序设计]—代理模式👳 本文章记录学习于——52.面向切面:AOP-场景模拟_哔哩哔哩_bilibili 最近闲来无事,在学习Spring的源码: 后面慢慢更新源码系列blog,希望多多关注🙏🙏 目前已经总结的b…

OSPF - 2、3类LSA(Network-LSA、NetWork-Sunmmary-LSA)

前篇博客有对常用LSA的总结 2类LSA(Network-LSA) DR产生泛洪范围为本区域 作用:  描述MA网络拓扑信息和网络信息,拓扑信息主要描述当前MA网络中伪节点连接着哪几台路由。网络信息描述当前网络的 掩码和DR接口IP地址。 影响邻居建立中说到…

景芯SOC设计实战

终身辅导、一对一辅导,手把手教您完成SoC全流程设计,从入门到进阶,带您掌握SoC芯片架构、算法、设计、验证、DFT、后端及低功耗全流程!直播视频不定期升级!让您快速超越同龄人! 景芯团队主打文档服务器实战…

多云架构,JuiceFS 如何实现一致性与低延迟的数据分发

随着大模型的普及,GPU 算力成为稀缺资源,单一数据中心或云区域的 GPU 资源常常难以满足用户的全面需求。同时,跨地域团队的协作需求也推动了企业在不同云平台之间调度数据和计算任务。多云架构正逐渐成为一种趋势,然而该架构下的数…

如何获取文件的MIME类型

文章目录 1. 概念介绍2. 方法与类型2.1 使用方法2.2 常见类型3. 示例代码4. 内容总结我们在上一章回中介绍了"如何加载本地图片"相关的内容,本章回中将介绍如何获取文件类型.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中提到的文件类型是指MI…