#include<stdio.h>
int main()
{
int a=12,b;
b=0x1f5&a<<3;
printf("%d,%d\n",a,b);
return 0;
}
左移运算符优先级高于&
所以先计算a<<3,结果为96,但a还是12
再0x1f5 & 96 ,结果b是96
a = 12
a<<3
类似这种 a是偶数 那么可以简单理解 << 就是乘以2 >> 就是除以2, 这里 a<<3 结果是12222 128 结果96
0x1f5 可以分解为 116^2 + 1516+5 = 501
96 转换二进制可以从128二进制倒推 128 二进制 10000000 96 二进制 01100000
501 转换2进制可以从 512的二进制位倒推一下就很简单 512 二进制 1000000000 501二进制 000111111010
501 & 96
000 111111010
01100000
00001100000 结果是96