//按位移运算符 <<、>>
/*
按位左移运算符(<<)和按位右移运算符(>>)可以对一个数的所有位进行指定位数的左移和右移,但是需要遵守定义的规则。对一个数进行按位左移或按位右移,相当于对这个数进行乘以 2 或除以 2 的运算,将一个整数左移一位,等价于将这个数乘以 2,同样地,将一个整数右移一位,等价于将这个数除以 2。
无符号整数的移位运算:
对无符号整数进行移位的规则如下:
已存在的位按指定的位数进行左移和右移;
任何因移动而超出整型存储范围的位都会被丢弃;
用 0 来填充移位后产生的空白位。
*/
let num1 = 0b101
let num2 = num1 << 1 //左移右边补0 0b1010 = 10
let num3 = num1 >> 1 //右移左边补0 0b010 = 2
let shitfNum:UInt8 = 4 //0b100
let value1 = shitfNum << 1
/*
100
100 0 = 0b1000 = 16
*/
let value2 = shitfNum >> 2
/*
100
001 = 0b001 = 1
/
let value3 = shitfNum << 3
/
100
100 000 = 32
*/
let value4 = shitfNum >> 1
/*
100
10 = 2
*/
let pink = 0xCC6699
let red = (pink & 0xFF0000)>>16 //分离出红色色值 0xCC = 204
let green = (pink & 0x00FF00)>>8 //分离出绿色色值 0x66 = 102
let blue = (pink & 0x0000FF) //分离出蓝色 0x99 = 153
// 按位与运算符 &
let numb1 = 0b101 & 0b111
/*
0101
0111
0101 = 5
*/
//按位或运算
let numm1 = 0b101 | 0b111 // 7
/*
0101
0111
0111 = 7
*/
//按位取反运算符 ~
0b101每一位上1变为0,0变为1
///
let a0 = 0b101
let a1 = ~a0 // 0b010 = 2
/*
101
010 = 2
*/
//按位异或运算符
let a2 = 0b101 ^ 0b111 // 2
/*
101
111
010 = 2
*/