Swift 位运算符



Swift 中的位运算符

当我们想要对指定数字的位进行运算时,通常会使用位运算符。这些运算符用于低级编程,进行位级计算,或在通信网络中以位发送数据。我们可以对整数类型应用位运算符。

这些运算符不会导致溢出,因为位运算符的结果始终在给定数值类型的范围内。Swift 支持以下位运算符:

运算符 名称 示例
~ 按位非运算符 ~(11011) = (00100)
& 按位与运算符 (110011) & (101101) = 100001
| 按位或运算符 (100011) | (10111) = 101111
^ 按位异或运算符 (100011) ^ (10111) = 00100
<< 按位左移运算符 (100011) << 2 = 10001100
>> 按位右移运算符 (100011) >> 2 = 1000.

Swift 中的按位非运算符

按位非运算符 (~) 用于反转所有给定的位(将 0 转换为 1 或 1 转换为 0)。或者可以说它返回给定位的反码。

例如,我们有 1100011 位,在使用按位非运算符后,我们将得到 0011100 位作为输出。它是一个前缀运算符,用在它将要操作的变量之前。

语法

以下是按位非运算符的语法:

~VariableName

示例

使用按位非运算符计算反码的 Swift 程序。

import Foundation
var num : UInt8 = 0b00011111

// Finding one's complement using bitwise NOT operator
var result = ~(num)
print("Original bits:", String(num, radix: 2))
print("One's complement:", String(result, radix: 2))

输出

Original bits: 11111
One's complement: 11100000

Swift 中的按位与运算符

按位与运算符 (&) 用于对给定两个操作数的每个位执行与运算。或者可以说它用于组合给定两个数字的位,并返回一个新数字,其位仅在两个输入位都为 1 时才设置为 1。例如,A = 110011 和 B = 101101,因此在执行按位与运算后,我们得到 100001。真值表如下:

P Q P & Q
0 0 0
1 0 0
0 1 0
1 1 1

语法

以下是按位与运算符的语法:

Operand1 & Operand2

示例

执行按位与运算的 Swift 程序。

import Foundation

var num1 : UInt8 = 0b1000101
var num2 : UInt8 = 0b1100011

// Performing bitwise AND operation
var result = num1 & num2

print("Result:", String(result, radix: 2))

输出

Result: 1000001

Swift 中的按位或运算符

按位或运算符 (|) 用于对给定两个操作数的每个位执行或运算。或者可以说它用于比较给定两个数字的位,并返回一个新数字,其位如果任何一个输入位为 1,则设置为 1。

例如,A = 100011 和 B = 10111,因此在执行按位或运算后,我们得到 101111。真值表如下:

P Q P | Q
0 0 0
1 0 1
0 1 1
1 1 1

语法

以下是按位或运算符的语法:

Operand1 | Operand2

示例

执行按位或运算的 Swift 程序。

import Foundation

var num1 : UInt8 = 0b1010001
var num2 : UInt8 = 0b1100011

// Performing bitwise OR operation
var result = num1 | num2

print("Result:", String(result, radix: 2))

输出

Result: 1110011

Swift 中的按位异或运算符

按位异或运算符 (^) 用于对给定两个操作数的每个位执行异或运算。或者可以说它用于比较给定两个数字的位,并返回一个新数字,其位如果一个输入位为 0 另一个位为 1 或反之亦然,则设置为 1。

例如,A = 100011 和 B = 10111,因此在执行按位异或运算后,我们得到 00100。真值表如下:

P Q P ^ Q
0 0 0
1 0 1
0 1 1
1 1 0

语法

以下是按位异或运算符的语法:

Operand1 ^ Operand2

示例

执行按位异或运算的 Swift 程序。

import Foundation

var num1 : UInt8 = 0b1011001
var num2 : UInt8 = 0b1100011

// Performing bitwise XOR operation
var result = num1 ^ num2

print("Result:", String(result, radix: 2))

输出

Result: 111010

Swift 中的按位左移运算符

按位左移运算符 (<<) 用于将给定数字的所有位向左移动给定位数。例如,A = 100011,因此将位向左移动 2 位后,我们得到 10001100。

向左移动无符号整数时,如果任何位超出整数边界,则将被丢弃。此外,当我们将位从左向右移动时,在原始位移动后会留下一个空间,因此该空间将用零填充。

相反,有符号整数以两种不同的方式移位。正整数(如果符号位为 0)将像无符号整数一样存储。相反,负整数(如果符号位为 1)将通过从 2 的 n 次幂中减去其绝对值来存储,其中 n 表示值位的数量,这也被称为二进制补码。

语法

以下是按位左移运算符的语法:

Operand1 << Operand2

示例

执行按位左移运算的 Swift 程序。

import Foundation
let number: UInt8 = 42 

// Perform a bitwise left shift operation
// Here the bits of a given number are shifted by 3 places on the left side
let shiftedNum = number << 3 

print("Original Number: \(number)")
print("Shifted Number: \(shiftedNum)")

输出

Original Number: 42
Shifted Number: 80

Swift 中的按位右移运算符

按位右移运算符 (>>) 用于将给定数字的所有位向右移动给定位数。例如,**A = 100011**,因此将位向右移动 2 位后,我们得到 1000。

众所周知,整数分为有符号和无符号两种类型。因此,当我们将无符号整数向右移动时,如果任何位超出整数边界,则将被丢弃。此外,当我们将位从右向左移动时,在原始位移动后会留下一个空间,因此该空间将用零填充。

同时,有符号整数以两种不同的方式移位。正整数(如果符号位为 0)将像无符号整数一样存储,而负整数(如果符号位为 1)将通过从 2 的 n 次幂中减去其绝对值来存储,其中 n 表示值位的数量。

语法

以下是按位右移运算符的语法:

Operand1 >> Operand2

示例

执行按位右移运算的 Swift 程序。

import Foundation

let number: UInt8 = 32 

// Perform a bitwise right shift operation
// Here the bits of a given number are shifted by 2 places on the right side
let shiftedNum = number >> 2 

print("Original Number: \(number)")
print("Shifted Number: \(shiftedNum)")

输出

Original Number: 32
Shifted Number: 8
swift_operators.htm
广告