我寫了一個QuadTree類,我需要包含鄰居搜索。我正在跟隨包含C實現的this paper。 (我基本上將它轉換爲C#)。而且我遇到了麻煩,因爲我不擅長處理二進制數字。我需要做以下的事情:C#中的按位加法和減法類似於C
給定#100和#010,結合他們得到#110。 1s永遠不會重疊。現在我所做的是存儲100和10,當我添加它時,它會給我110.
在數字(如#011)上執行左和右二進制移位。現在我正在存儲011並將>>或< <運算符應用到它。這給了我完全錯誤的數字,但奇怪的是,我用它找到常見的四叉樹父母的邏輯工作得很好。
給定#011和#001總和他們得到#100。現在我正在存儲11和1,這顯然根本不起作用 。
執行逐位減法,與上述相同,但 - 代替+ :)
執行與運算,OR和異或。
所以,現在我將所有東西都存儲爲一個看起來像二進制值的整數,而數學似乎適用於AND,OR,XOR和shift。數字在中間很瘋狂,但我最終得到正確答案。
我正在嘗試一個實現,現在我存儲的整數值是二進制數的值,但我必須來回轉換很多,這是一個特別的痛苦,因爲我在一個整數表示數字的值和二進制數字本身的字符串表示形式。每隔一行代碼創建一個新字符串將成爲性能噩夢。
你們可以推薦一個在C#中使用二進制數的基本策略嗎?
P.S.我永遠不需要看到這些數字的整數表示。我真的不在乎#010 == 2,我需要做的工作將其視爲#010結尾。
希望這比我原來的帖子更清晰!
你怎麼想象按位減法和整數相減是不同的?此外,如果您將數字10存儲在一個int中,則該數字是十進制數,並且不會是二進制數10. – 2012-04-18 21:58:50
不是發佈部分四叉樹,而是在C#和C中編寫一個小控制檯應用程序,並嘗試展示具體差異。 – 2012-04-18 22:02:05
我的回覆評論變得越來越長了,所以我會試着澄清原帖,我感謝你的評論,我以前從未使用過二進制文件。 C和C#可能工作相同,我只是不明白如何工作,所以我也會在控制檯應用程序上工作。 – Eric 2012-04-18 22:13:12