
- 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