- Swift 教程
- Swift - 首页
- Swift - 概述
- Swift - 环境
- Swift - 基本语法
- Swift - 变量
- Swift - 常量
- Swift - 字面量
- Swift - 注释
- Swift 运算符
- Swift - 运算符
- Swift - 算术运算符
- Swift - 比较运算符
- Swift - 逻辑运算符
- Swift - 赋值运算符
- Swift - 位运算符
- Swift - 其他运算符
- Swift 高级运算符
- Swift - 运算符重载
- Swift - 算术溢出运算符
- Swift - 恒等运算符
- Swift - 范围运算符
- Swift 数据类型
- Swift - 数据类型
- Swift - 整数
- Swift - 浮点数
- Swift - Double
- Swift - 布尔值
- Swift - 字符串
- Swift - 字符
- Swift - 类型别名
- Swift - 可选类型
- Swift - 元组
- Swift - 断言和前提条件
- Swift 控制流
- Swift - 决策
- Swift - if 语句
- Swift - if...else if...else 语句
- Swift - if-else 语句
- Swift - 嵌套 if 语句
- Swift - switch 语句
- Swift - 循环
- Swift - for in 循环
- Swift - while 循环
- Swift - repeat...while 循环
- Swift - continue 语句
- Swift - break 语句
- Swift - fall through 语句
- Swift 集合
- Swift - 数组
- Swift - 集合
- Swift - 字典
- Swift 函数
- Swift - 函数
- Swift - 嵌套函数
- Swift - 函数重载
- Swift - 递归
- Swift - 高阶函数
- Swift 闭包
- Swift - 闭包
- Swift - 逃逸和非逃逸闭包
- Swift - 自动闭包
- Swift 面向对象编程
- Swift - 枚举
- Swift - 结构体
- Swift - 类
- Swift - 属性
- Swift - 方法
- Swift - 下标
- Swift - 继承
- Swift - 重写
- Swift - 初始化
- Swift - 析构
- Swift 高级
- Swift - ARC 概述
- Swift - 可选链
- Swift - 错误处理
- Swift - 并发
- Swift - 类型转换
- Swift - 嵌套类型
- Swift - 扩展
- Swift - 协议
- Swift - 泛型
- Swift - 访问控制
- Swift - 函数与方法
- Swift - SwiftyJSON
- Swift - 单例类
- Swift 随机数
- Swift 不透明类型和装箱类型
- Swift 有用资源
- Swift - 在线编译
- Swift - 快速指南
- Swift - 有用资源
- Swift - 讨论
Swift - 算术溢出运算符
算术溢出运算符是一种特殊的运算符,用于对整数类型执行算术运算并高效地处理溢出。当我们需要执行可能超过给定整数最大或最小范围的计算时,通常会使用它们。
例如,我们正在添加两个 Int8 类型的整数,它们超过了 Int8 的最大范围(-128 到 127)。因此,如果我们使用普通的加法运算符“+”,我们将得到一个错误,因为我们不允许在 Int8 中存储大于最大值或最小值的数字,但使用算术溢出运算符,我们可以轻松地溢出 Int8 的最小值和最大值而不会出现任何错误。
Swift 支持三种类型的算术溢出运算符:
运算符 | 名称 | 示例 |
---|---|---|
&+ | 溢出加法 | X &+ Y |
&- | 溢出减法 | X &- Y |
&* | 溢出乘法 | X &* Y |
溢出值
在了解溢出运算符的工作原理之前,我们首先了解什么是溢出值。众所周知,整数具有特定的范围,包括最小值和最大值,例如 Int8 可以存储 -128 到 127 之间的值。
因此,溢出值表示超过给定整数的最小或最大范围的值。这通常发生在使用溢出算术运算符时。
我们可以使有符号和无符号整数溢出。当我们向正方向溢出时,它将从最大有效整数值环绕到最小值,而当我们向负方向溢出时,它将从最小有效整数值环绕到最大值。
示例
var num = UInt8.max num = num &+ 1
这里,一个无符号整数在 &+ 运算符的帮助下向正方向溢出,因为 UInt8 的最大值为 255 或二进制表示为 11111111。
现在我们将 1 添加到 num,这将超过其最大值。因此,此溢出通过环绕到 UInt8 的最小可表示值 0 来处理。
Swift 中的溢出加法 "&+"
溢出加法“&+”运算符用于添加两个整数并进行溢出检查。如果发生任何溢出,它将正确地处理它,而不会导致程序出错。此运算符可以与有符号和无符号整数一起使用。
语法
以下是溢出加法运算符的语法:
var value = x &+ b
示例
Swift 程序计算两个 Int8 类型整数的和。
import Foundation // Defining integer data type let num1 : Int8 = 110 let num2 : Int8 = 30 // Calculate the sum using the normal addition operator var sum = num1 + num2 print("Sum of \(num1) and \(num2) = \(sum)")
输出
Stack dump: 0. Program arguments: /opt/swift/bin/swift-frontend -frontend -interpret main.swift -disable-objc-interop -color-diagnostics -new-driver-path /opt/swift/bin/swift-driver -empty-abi-descriptor -resource-dir /opt/swift/lib/swift -module-name main 1. Swift version 5.7.3 (swift-5.7.3-RELEASE) 2. Compiling with the current language version 3. While running user code "main.swift" Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it): /opt/swift/bin/swift-frontend(+0x551a103)[0x55731fee8103] /opt/swift/bin/swift-frontend(+0x551802e)[0x55731fee602e] /opt/swift/bin/swift-frontend(+0x551a48a)[0x55731fee848a] /lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7f138af33520] [0x7f1389bea35f] /opt/swift/bin/swift-frontend(+0x1940b3d)[0x55731c30eb3d] /opt/swift/bin/swift-frontend(+0xc74db9)[0x55731b642db9] /opt/swift/bin/swift-frontend(+0xa454c6)[0x55731b4134c6] /opt/swift/bin/swift-frontend(+0xa419b6)[0x55731b40f9b6] /opt/swift/bin/swift-frontend(+0xa410a7)[0x55731b40f0a7] /opt/swift/bin/swift-frontend(+0xa4341e)[0x55731b41141e] /opt/swift/bin/swift-frontend(+0xa4273d)[0x55731b41073d] /opt/swift/bin/swift-frontend(+0x914a39)[0x55731b2e2a39] /lib/x86_64-linux-gnu/libc.so.6(+0x29d90)[0x7f138af1ad90] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80)[0x7f138af1ae40] /opt/swift/bin/swift-frontend(+0x914295)[0x55731b2e2295] Illegal instruction (core dumped)
但我们得到了一个错误,因为结果值将超过 Int8 的最大范围。因此,为了克服此问题,我们将使用加法溢出运算符“&+”。此运算符将添加它们,而不会产生错误。
import Foundation // Defining integer data type let num1 : Int8 = 110 let num2 : Int8 = 30 // Calculate the sum using the addition overflow operator var sum = num1 &+ num2 print("Sum of \(num1) and \(num2) = \(sum)")
输出
Sum of 110 and 30 = -116
Swift 中的溢出减法 "&-"
溢出加法“&-”运算符用于减去两个整数并进行溢出检查。如果发生任何溢出,它将正确地处理它,而不会导致出错。它适用于有符号和无符号整数。
语法
以下是溢出减法运算符的语法:
var value = x &- b
示例
Swift 程序减去两个无符号整数。
import Foundation // Defining unsigned integer data type let num1 : UInt8 = 54 let num2 : UInt8 = 90 // Subtract integers using the normal subtraction operator var sum = num1 - num2 print("\(num1) - \(num2) = \(sum)")
输出
Stack dump: 0. Program arguments: /opt/swift/bin/swift-frontend -frontend -interpret main.swift -disable-objc-interop -color-diagnostics -new-driver-path /opt/swift/bin/swift-driver -empty-abi-descriptor -resource-dir /opt/swift/lib/swift -module-name main 1. Swift version 5.7.3 (swift-5.7.3-RELEASE) 2. Compiling with the current language version 3. While running user code "main.swift" Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it): /opt/swift/bin/swift-frontend(+0x551a103)[0x55736aebe103] /opt/swift/bin/swift-frontend(+0x551802e)[0x55736aebc02e] /opt/swift/bin/swift-frontend(+0x551a48a)[0x55736aebe48a] /lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7f575ce12520] [0x7f575bac936c] /opt/swift/bin/swift-frontend(+0x1940b3d)[0x5573672e4b3d] /opt/swift/bin/swift-frontend(+0xc74db9)[0x557366618db9] /opt/swift/bin/swift-frontend(+0xa454c6)[0x5573663e94c6] /opt/swift/bin/swift-frontend(+0xa419b6)[0x5573663e59b6] /opt/swift/bin/swift-frontend(+0xa410a7)[0x5573663e50a7] /opt/swift/bin/swift-frontend(+0xa4341e)[0x5573663e741e] /opt/swift/bin/swift-frontend(+0xa4273d)[0x5573663e673d] /opt/swift/bin/swift-frontend(+0x914a39)[0x5573662b8a39] /lib/x86_64-linux-gnu/libc.so.6(+0x29d90)[0x7f575cdf9d90] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80)[0x7f575cdf9e40] /opt/swift/bin/swift-frontend(+0x914295)[0x5573662b8295] Illegal instruction (core dumped)
同样,我们得到了一个错误,因为它超出了范围。因此,为了减去两个无符号整数,我们将使用减法溢出“&-”运算符,它将减去它们,即使它们的范围超过了,也不会产生任何错误。
import Foundation // Defining unsigned integer data type let num1 : UInt8 = 54 let num2 : UInt8 = 90 // Subtract integers using the subtraction overflow operator var sum = num1 &- num2 print("\(num1) - \(num2) = \(sum)")
输出
54 - 90 = 220
Swift 中的溢出乘法(&*)
溢出乘法“& *”运算符用于找到两个整数的乘积并进行溢出检查。如果发生任何溢出,它将正确地处理它,而不会导致出错。它适用于有符号和无符号整数。
语法
以下是溢出乘法运算符的语法:
var value = x &* b
示例
Swift 程序使用乘法溢出“& *”运算符计算两个有符号整数的乘积。
import Foundation // Defining integer data type let num1 : Int8 = 54 let num2 : Int8 = 90 // Calculate the product of two integers using the multiplication overflow operator var sum = num1 &* num2 print("Product of \(num1) and \(num2) = \(sum)")
输出
Product of 54 and 90 = -4