位运算判断二进制第n位是否为1

get

判断二进制数据的第n位是否为1可以用&运算来判断
先来看下面的运算

十进制 二进制 位左移
21=2 10 1<<1
22=4 100 1<<2
23=8 1000 1<<3
24=16 10000 1<<4

很难看不出其中一个规律,十进制d的第n为1,其余位为0的十进制计算公式为:d = 1 << (n -1)
比如16为第5位为1,十进制数为 1 << 4
有了上面的基础,我们如果想计算某个十进制的第n位是否为1时,可以进行位与运算;
位与运算:两位都是1时结果为1,否则为0
比如判断10的第3位是否为1,就可以换算成10 & 8
1 0 1 0
1 0 0 0
——————
1 0 0 0
结果为8大于0 表示10的第三位为1

2的第3位是否为1
0 0 1 0
0 1 0 0
——————
0 0 0 0
结果为0 表示2的第三位不是1

/**
	 * 判断十进制数某位是否为1
	 * @param number 需要计算的值
	 * @param index  位数
	 * @return
	 */
	private boolean isBitZero(int number, int index) {
		return (number & 1 << (index - 1)) > 0;
	}

set

上面我们可以判断某位的值是否为1,下面我们设置某位的值为1
按位或运算符“|”是双目运算,其功能的参与运算的两数想或,只要两个相对应的位有1,结果位就为1,
我们要设置某位为1需要用到或运算,遇1得1,因为设置某位数时不应该影响别的位值,
比如3的二进制为11,我们想让第三位变为1,3 |(1 << (3-1))= 011 | 100 = 111 = 7

 /**
     * 十进制某位数设置为1
     * @param number
     * @param index
     * @return
     */
    private int assignBitValue(int number, int index) {
        return number | 1 << (index - 1);
    }
posted @ 2022-10-17 16:25  木马不是马  阅读(823)  评论(0编辑  收藏  举报