import Foundation
/*位运算符***********************************************/
//按位取反运算符
//按位取反运算符( ~ ) 可以对一个数值的全部位进行取反:
//按位取反操作符是一个前置运算符,需要直接放在操作数的之前,并且它们之间不能添加任何空格。
let initialBits: UInt8 = 0b00001111
let invertedBits = ~initialBits
// 等于 0b11110000
//按位与运算符
//按位与运算符( & )可以对两个数的比特位进行合并。它返回一个新的数,只有当两个操作数的对应位都为 1 的 时候,该数的对应位才为 1 。
let firstSixBits: UInt8 = 0b11111100
let lastSixBits: UInt8 = 0b00111111
let middleFourBits = firstSixBits & lastSixBits
// 等于 00111100
//按位或运算符
//按位或运算符( | )可以对两个数的比特位进行比较。它返回一个新的数,只要两个操作数的对应位中有任意一个为 1 时,该数的对应位就为 1 。
let someBits: UInt8 = 0b10110010
let moreBits: UInt8 = 0b01011110
let combinedbits = someBits | moreBits
// 等于 11111110
//按位异或运算符
//按位异或运算符( ^ )可以对两个数的比特位进行比较。它返回一个新的数,当两个操作数的对应位不相同时,该 数的对应位就为 1 :
let firstBits: UInt8 = 0b00010100
let otherBits: UInt8 = 0b00000101
let outputBits = firstBits ^ otherBits
// 等于 00010001
//按位左移/右移运算符
//按位左移运算符( << )和按位右移运算符( >> )可以对一个数进行指定位数的左移和右移,但是需要遵守下面定义的规则。
//对一个数进行按位左移或按位右移,相当于对这个数进行乘以 2 或除以 2 的运算。将一个整数左移一位,等价于 将这个数乘以 2,同样地,将一个整数右移一位,等价于将这个数除以 2。
//对无符号整型进行移位的规则如下:
//1. 已经存在的比特位按指定的位数进行左移和右移。
//2. 任何移动超出整型存储边界的位都会被丢弃。
//3. 用 0 来填充移动后产生的空白位。
//这种方法称为逻辑移位( logical shift )。
let shiftBits: UInt8 = 4 // 即二进制的<