Java:判断二进制数的某一位是否为1
可以直接把1个10进制的数当作2进制来看待的.判断他某几位是不是0可以用掩码的方法:
比如:
判断10进制10的第2位是不是1,可以用 10 & 2 是否等于0来得到,等于0,该位不是1,否则该位是1,原理, 10和2的2进制代码是:
1010 & 0010 = 0010 != 0 所以10的第2位是1,依次类推,用10&4去判断第3位是不是1.用6判断第2位和第3位是不是同时为1
在网上看到了这个回答,觉得比较高端,但是我还参不透里面的内涵.....请前辈指点迷津
最开始根据上面的讲解,10 & 2就是在判断10的二进制数的第二位是不是为1
所以我展开了联想
10 & 3就是在判断10的二进制数的第三位是不是为1
10 & 4就是在判断10的二进制数的第四位是不是为1
然后我又往后看这段话[ 用10&4去判断第3位是不是1.用6判断第2位和第3位是不是同时为1 ]我就发现我想多了,哪位大神知道这种方法是怎么用的?
Answers
首先
&
是位的与运算符,是指二进制数按位“与”的操作, 逻辑与就是两者都为真的时候才为真,其他真假,假真,假假的运算结果都是假。二进制写法如下
1 & 1 = 1 , 1 & 0 = 0 , 0 & 1 = 0, 0 & 0 = 0
回到你的问题里,
10 & 2
是十进制表示。
二进制是
1010
0010 &
————————
0010
结果不是0, 所以说明第二位是1. 他这里没有描述清楚的是2并不是第二位的意思,只是恰巧2的二进制第二位是1,仅此而已。
所以,如果想判断十进制数 d 的二进制第n位是否是1,应该用以下的数m来进行&运算
m = 1 << n-1 (n是大于0的整数)
以上公式
n=1的时候m=1
n=2的时候m=2
n=3的时候m=4
n=4的时候m=8
...
例子
10 & 2
所述的是n=2的情况。
如果同时mask多个位,只需要将m相加即可。
例如第2位和第3位, 将m2+m3 = 2 + 4 = 6