关于位运算,无非就是6个标识符,即
<<左移位>>右移位&按位与|按位或~按位取反^按位异或
(1)优先级
a.首先位运算的优先级除了~之外,优先级都低于+/-,这表明 a<<1+2 等价于 a<<(1+2),~的优先级与!等同;
b.其次位运算的优先级顺序为 (由高到低);
<< >> & ^ |
(2)访问位和位域
a.位的设置i |= i<< j;
b.位的清除i &= ~( 1 << j );
c.位的测试 i & 1 << j
d.修改位域 与获取位域
这个跟位差不多,要注意的是修改位于的时候先要 & 上要修改的所有位的~;
(3)XOR加密
a.XOR运算符^但是这个运算符让我感觉很厉害 : 位运算 相同为0,不同为1
即 0001 1010
^ 0000 1101
0001 0111
然后我们来看它的特点
i ^ i = 0 ;
i ^ j = j ^ i ;
i ^ (j^ k) =i ^(j ^ k) ;
然后是个证明:
i ^ j = k;
i ^ j ^ i = k ^ i;
j = k ^ i;
这时我发现了, i j k 它们3可以互相 ^ 这玩了
也就说同一变量与另一变量和其异或值异或等于自身, 就是说 i ^ j = k ; i ^ k = j ; 其实想想挺好理解的 i ^ i ^ j = j 嘛
这时一帮刻(闲)苦(得)钻(蛋)研(疼)的人不愿意用常规的两个变量换值的方法了
写出了这样的代码
a = a ^ b; //
b = b ^ a; // b = b ^ a ^ b;
a = a ^ b; // a = a ^ b ^ a;
这个确实很腻害, 我智商捉急,反应了好半天;
b.XOR运算符加密
这个就了解了一下大概