位操作符通常在諸如圖像處理和創(chuàng)建設備驅動等底層開發(fā)中使用,使用它可以單獨操作數(shù)據(jù)結構中原始數(shù)據(jù)的比特位。在使用一個自定義的協(xié)議進行通信的時候,運用位運算符來對原始數(shù)據(jù)進行編碼和解碼也是非常有效的。
Swift支持如下所有C語言的位運算符:
按位取反運算符~對一個操作數(shù)的每一位都取反。

這個運算符是前置的,所以請不加任何空格地寫著操作數(shù)之前。
let initialBits: UInt8 = 0b00001111
let invertedBits = ~initialBits // 等于 0b11110000
UInt8是8位無符整型,可以存儲0~255之間的任意數(shù)。這個例子初始化一個整型為二進制值00001111(前4位為0,后4位為1),它的十進制值為15。
使用按位取反運算~對initialBits操作,然后賦值給invertedBits這個新常量。這個新常量的值等于所有位都取反的initialBits,即1變成0,0變成1,變成了11110000,十進制值為240。
按位與運算符對兩個數(shù)進行操作,然后返回一個新的數(shù),這個數(shù)的每個位都需要兩個輸入數(shù)的同一位都為1時才為1。

以下代碼,firstSixBits和lastSixBits中間4個位都為1。對它倆進行按位與運算后,就得到了00111100,即十進制的60。
let firstSixBits: UInt8 = 0b11111100
let lastSixBits: UInt8 = 0b00111111
let middleFourBits = firstSixBits & lastSixBits // 等于 00111100
按位或運算符|比較兩個數(shù),然后返回一個新的數(shù),這個數(shù)的每一位設置1的條件是兩個輸入數(shù)的同一位都不為0(即任意一個為1,或都為1)。

如下代碼,someBits和moreBits在不同位上有1。按位或運行的結果是11111110,即十進制的254。
let someBits: UInt8 = 0b10110010
let moreBits: UInt8 = 0b01011110
let combinedbits = someBits | moreBits // 等于 11111110
按位異或運算符^比較兩個數(shù),然后返回一個數(shù),這個數(shù)的每個位設為1的條件是兩個輸入數(shù)的同一位不同,如果相同就設為0。

以下代碼,firstBits和otherBits都有一個1跟另一個數(shù)不同的。所以按位異或的結果是把它這些位置為1,其他都置為0。
let firstBits: UInt8 = 0b00010100
let otherBits: UInt8 = 0b00000101
let outputBits = firstBits ^ otherBits // 等于 00010001
左移運算符<<和右移運算符上一篇:Swift大寫和小寫字符串下一篇:Swift結構體聲明