在0中找1

来自姬鸿昌的知识库
Jihongchang讨论 | 贡献2022年11月14日 (一) 03:42的版本 →‎右位移
跳到导航 跳到搜索

https://www.bilibili.com/video/BV1UK411D724

题目

比如给定“10001110”,答案是4;

在比如“10001000”,答案是2;

那如果是“1000111010001000……”非常多、非常长呢?


与运算和右移的解

思路:

位运算的与操作:

……1(2)&1(2)=……1(2)

……1
& 1
……1


……0(2)&1(2)=……0(2)

……0
& 1
……0



右位移

>>

1 1 1 0

0 1 1 1

代码实现示例

public class Test {

    public static void main(String[] args) {
        long count1in0 = 0b00101010010100000000011111;

        int count = 0;

        while (count1in0 != 0) {

            if ((count1in0 & 1) % 10 == 1) {
                count++;
            }

            count1in0 >>= 1;

        }

        System.out.println(count);

    }

}
10