背景
位:计算机底层使用的是二进制,0和1,就是位。
字节:相当于将位打包,一字节等于8位。
位运算符
&与 同时为1计算为1
|或 只要一个为1计算为1
^异或 只有一个为1计算为1
<< >>左移右移
例题
int fun1(int i) {
return i < 2 ? i : fun1(i - 1) + fun1(i - 2);
/*f0=0 f1=1 f2=1 f3=2 f4=3 f5=5 f6=8 f7=13
f8=21 f9=34 f10=55 f11=89 f12=144
f3x(x=0,1,2...)是偶数,则f101肯定是奇数
*/
}
int fun2(unsigned int i) {
unsigned int j = i & 0xFFFF;
return (j & 0x9108) ^ (j & 0x8019);//a-f为0或1
/*(j & 1001 0001 0000 1000) ^ (j & 1000 0000 0001 1001)
(a00b 000c 0000 d000) ^ (a000 0000 000e d00f)
000b 000c 000e 000f
*/
}
int main() {
int n = fun2(fun1(101)) % 4;
printf("%d",n);//f1(101)是奇数,f2中j最后一位是1,f必为1,则n为1
return 0;
}