一、好言
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
二、位运算
var x uint8 = 1<<1 | 1<<5
var y uint8 = 1<<1 | 1<<2
fmt.printf("%08b\n",x&y) //"00000010"
fmt.printf("%08b\n",x|y) //"00100110"
fmt.printf("%08b\n",x^y) //"00100100"
fmt.printf("%08b\n",x&^y) //"00100000"
fmt.printf("%08b\n",x<<1) //01000100
fmt.printf("%08b\n",x<<1) //00010001
2、1 与运算
& 运算用于二进制的取位计算,如果相同的两个数字都为1,则为1;如果有一个不为1,则为0
00100010
&
00000110
00000010
2、2 或运算
|运算计算规则是相同位只要一个为1,则为1
00100010
|
00000110
00100110
2、3 异或运算
^ 运算故则是相同位不同,则位1,相同同则位0
^运算的逆运算是它本身,两次异或同一个数据最后得到的结果是其本身。
00100010
^
00000110
00100100
2、4 &^
位操作运算符&^用于按位置零(AND NOT):如果对应y中bit位为1的话, 表达式z = x &^ y结果z的对应的bit位为0,否则z对应的bit位等于x相应的bit位的值。
00100010
^
00000110
00100000
2、5 左移
00100010
0100010
00100010 左移一位后变成0100010,所以右边空缺一位,那么用0补充。
2、6 右移
00100010
0010001
00100010右移后变成0010001,所以左边缺一位,用0补充;
x<<n 和x>>n移位运算中,决定了移位操作bit数部分必须是无符号数;被操作的x数可以是有符号或无符号数。算术上,一个x<<n左移运算等价于乘以2的n次方,一个x>>右移运算等价于除以2的n次方。
左移运算用零填充右边空缺的bit位,无符号数的右移运算也是用0填充左边空缺的bit位,但是有符号数的右移运算会用符号位的值填充左边空缺的bit位。因为这个原因,最好用无符号运算,这样你可以将整数完全当作一个bit位模式处理。