gpt4 book ai didi

java - 使用位操作运算符进行位格式转换

转载 作者:行者123 更新时间:2023-12-01 15:14:39 26 4
gpt4 key购买 nike

我有一个转换问题,我有点挣扎。一些背景知识...正在研究一些计算生物学问题,因此需要速度非常快(处理大量数据集)。基本上我有以下 SNP 的位表示,我想写一些掩码/和/异或/等。操作,以便我可以快速从一种表示形式转换为下一种表示形式:

00 -> 100

01 -> 010

11 -> 001

例如,00010111应该转换为100010010001。我将这些位存储在一个相当大的java.util.BitSet中,并且理想地希望能够仅使用位运算符将它们转换为新格式。

非常欢迎任何帮助!

最佳答案

我会使用查找表。一次抓取 16 位,并在具有 24 位条目的 64K 表中查找它们。

int[] table = new int[65536];
table[0] = 0b100100100100100100100100;
table[1] = 0b100100100100100100100010;
...
table[65535] = 0b001001001001001001001001;
BitSet output = new BitSet();
for (int i = 0; i < length; i += 16) {
int x = (input.get(i) ? 1 : 0)
+ (input.get(i+1) ? 2 : 0)
...
+ (input.get(i+15) ? 32768 : 0);
int y = table[x];
output.set(i/16*24, (y & 1) != 0);
output.set(i/16*24 + 1, ((y>>1) & 1) != 0);
...
output.set(i/16*24 + 23, ((y>>23) & 1) != 0);
}

关于java - 使用位操作运算符进行位格式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com