JMa*_*ues 5 java string bit-manipulation bitset
我正在使用BitSets在Java中实现一个程序,我陷入了以下操作:
如果所有BitSet中有超过1个,则N BitSet返回BitSet为0,否则返回1
举个例子,假设我们有这3套:
00111
11100预期结果
对于以下几组:
00101
01000预期结果
我试图通过逐位操作来完成这个操作,并且我已经意识到我需要的是字面上的所有集合或者所有集合之间,但不是以迭代的方式,所以我很难接受该做什么.这甚至可能吗?
我想避免昂贵的解决方案,必须检查每组中的每个位,并为每个位置保留一个计数器......
谢谢你的帮助
编辑:有些人问,这是我正在研究的项目的一部分.我正在构建一个时间表生成器,基本上一个软约束是没有学生在1天内只有1个课程,所以这些集合代表每个小时的参加学生,我想过滤那些只有1个班级的学生.
你可以用两个值做你想做的事。一个至少设置一次位,第二个设置多次。该组合可用于确定那些设置一次且不再重复的设置。
int[] ints = {0b10010, 0b01011, 0b00111, 0b10100, 0b00101};
int setOnce = 0, setMore = 0;
for (int i : ints) {
setMore |= setOnce & i;
setOnce |= i;
}
int result = setOnce & ~setMore;
System.out.println(String.format("%5s", Integer.toBinaryString(result)).replace(' ', '0'));
Run Code Online (Sandbox Code Playgroud)
印刷
01000
Run Code Online (Sandbox Code Playgroud)