“在0中找1”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) (→右位移) |
Jihongchang(讨论 | 贡献) (→右位移) |
||
| 第56行: | 第56行: | ||
|1 | |1 | ||
|} | |} | ||
| + | |||
| + | ==== 代码实现示例 ==== | ||
| + | <syntaxhighlight lang="java"> | ||
| + | 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); | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | </syntaxhighlight><syntaxhighlight lang="console"> | ||
| + | 10 | ||
| + | </syntaxhighlight> | ||
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