给定一个二进制数a,如果想取这个二进制数的第b位,怎么做?
假如要取第3位,一个很简单的方法。
1.首先把1往左移3位:(1的二进制是1)
int c=1<<3;//此时c的二进制为1000,是1左移三位的结果
2.然后把c和a作与运算,所得结果就能告诉你答案
int d=a&c;//1010&1000=1000,那么d的结果的二进制就是1000,此时若a的第3位为0,那么d会等于0
由此可以看出:
- 如果a的第b位是0,最后的结果也是0;
- 如果第b位不是0,那么最后的结果非零,而是1左移b位也就是2^b的结果。
据此可以判断a的第b位是0还是1。
if(a&(1<<b))//a的第b位是1的情况
{...}
else//不是的情况
{...}