//
// main.swift
// Swift-位运算符
//
// Created by dingkang on 16/6/8.
// Copyright © 2016年 dingkang. All rights reserved.
//
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))")
输出结果: