Swift 位運算子

2021-07-13 06:03:35 字數 1577 閱讀 8406

import foundation

位運算子通常在如影象處理和建立裝置驅動等底層開發中使用,使用它可以單獨運算元據結構中原始資料的位元位。去使用乙個定義的協議進行通訊的時候,運用位運算子來對原始資料進行編碼和解碼也是非常有效的。

1.按位取反運算子

按位取反運算子~是對乙個運算元的每一位都取反

let initialbits:uint8 = 0b00001111 //定義乙個常量為uint8,也就是8為無符整型,值為00001111

let invertedbits = ~initialbits //使用按位取反運算~對initalbits操作,然後賦值給新常量,常量的值也就是取反後的initialbits,也就是1變成了0,0變成了1,結果也即變成了11110000

print("\(string(invertedbits,radix:2))")//string(invertedbits,radix:2)是把輸出結果顯示為uint8,8位無符整型。

2.按位與運算子

按位與運算子用於對兩個數進行操作,然後返回乙個新的數,這個數的每一位都需要兩個輸入數的同一位都為1時才為1

下面**中,firstbits和lastbits前後兩位都為1。對它們進行了按位與運算後,就得到了11000011。

let firstbits:uint8 = 0b11000011

let lastbits:uint8 = 0b11111111

let middlebits:uint8 = firstbits & lastbits

print

("\(string(middlebits,radix:2))")

3.按位或運算子

按位或運算子|用於比較兩個數,然後返回乙個新的數,這個數的每一位數字1的條件就是兩個輸入數的同一位都不為0(也就是任意乙個為1或者兩個都為1)

下面**中,onebits為00110011和twobits10101010在不同位上有1,對它們進行了或運算的結果為10111011

let onebits:uint8 = 0b00110011

let twobits:uint8 = 0b10101010

let threebits:uint8 = onebits | twobits

print

("\(string(threebits,radix:2))")

4.按位異或運算子

按位異或運算子^用於比較兩個數,然後返回乙個數,這個數的每一位為1的條件就是連個輸入數的同一位不同,如果相同就為0。

下面**中,abits為10000000,bbits為00000001,兩個數都有乙個1與另乙個數不同,所以按位異或的結果是把它置為1,其他都置為0。

let abits:uint8 = 0b10000000

let bbits:uint8 = 0b00000001

let cbits:uint8 = abits ^ bbits

print

("\(string(cbits,radix:2))")

位運算子,「,」逗號運算子,

位運算子有 按位與 按位或 按位異或 按位取反 優先順序從高到低,依次為 按位與運算有兩種典型用法,一是取乙個位串資訊的某幾位,如以下 擷取x的最低7位 x 0177。二是讓某變數保留某幾位,其餘位置0,如以下 讓x只保留最低6位 x x 077。按位或運算的典型用法是將乙個位串資訊的某幾位置為1。...

運算子之位運算子

右移 負數 無符號右移 或 異或 與 非 說明 位運算子都是作用在二進位製上的 比如 n 50 n 1 結果是多少?100 n 2 結果是多少?200 n 5 結果是多少?1600 為什麼會是這樣的呢?運算的邏輯如下 1,n 50 2,n的二進位制是 0011 0010 3,0011 0010 左移...

ECMAScript 運算子 位運算子

位運算子是在數字底層 即表示數字的 32 個數字 進行操作的 重溫整數 ecmascript 整數有兩種型別,即有符號整數 允許用正數和負數 和無符號整數 只允許用正數 在 ecmascript 中,所有整數字面量預設都是有符號整數,這意味著什麼呢?有符號整數使用 31 位表示整數的數值,用第 32...