我正在编写一个 QuadTree 类,我需要包括邻居搜索。我正在关注包括 C 实现的这篇论文。(我基本上是将其转换为 C#。)而且我遇到了麻烦,因为我不太擅长处理二进制数。我需要做以下事情:
给定#100 和#010,将它们组合得到#110。1s 永远不会重叠。现在我所做的是存储 100 和 10,当我添加它们时,它给了我 110。
对 #011 等数字执行左右二进制移位。现在我正在存储 011 并对其应用 >> 或 << 运算符。这给了我一个完全错误的数字,但奇怪的是,我用它来寻找常见的四叉树父母的逻辑工作得很好。
给定#011 和#001 将它们相加得到#100。现在我正在存储 11 和 1,这显然根本不起作用。
执行按位减法,与上面相同,但 - 而不是 + :)
执行 AND、OR 和 XOR。
因此,现在我将所有内容存储为看起来像二进制值的整数,并且数学似乎适用于 AND、OR、XOR 和移位。中间的数字很疯狂,但我最终得到了正确的答案。
我现在正在尝试一个实现,我存储整数值,它是二进制数的值,但我必须来回转换很多,这特别痛苦,因为我在值的整数表示之间进行转换数字和二进制数本身的字符串表示形式。每隔一行代码创建一个新字符串将是一场性能噩梦。
你们能推荐一个在 C# 中处理二进制数的基本策略吗?
PS我不需要看到这些数字的整数表示。我真的不在乎#010 == 2,我需要做的工作将其视为#010 故事的结尾。
希望这比我原来的帖子更清楚!