注意:這個答案已經被大量編輯,由於缺乏在原來的問題的信息。此版本的答案現在基於具有足夠信息的更新問題。對於歷史記錄,請檢查編輯日誌。
兩件事情:
&&
使用布爾表達式之間,以確定C#的邏輯AND-值
^
意味着XOR,沒有提出對所述功率-的。你沒有問這個問題,但你發現^
似乎沒有做好它的工作是不可避免的。
的&&
易於處理,因爲它可以與單個&
代替,其具有雙重含義,這取決於上下文來代替。它可能是一個完全評估邏輯AND運算符(&&
是一個短路的運算符),或者它是一個按位運算符,這正是您想要的。
雖然^
是不同的。最直接的等效值是Math.Pow,但在這種情況下,可以採用更好的替代方法,位移。
的2^X
的情況下,可以認爲是移位1比特X位置向左,和移位位向左有它自己的操作者,所述操作者<<
。
因此2^X
可以替換爲1 << X
。
在這種情況下,這就是你想要什麼,你內心最if語句:
if ((intNumber & (1 << index)) != 0)
a = a + "1";
else
a = a + "0";
把它插入到一個循環就像你在你的底例如,你會得到這樣的:
for (Int32 index = 7; index >= 0; index--)
if ((intNumber & (1 << index)) != 0)
bin = bin + "1";
else
bin = bin + "0";
現在,連接這樣的字符串會產生GC壓力,所以您應該將這些數字存儲到Char
數組中,然後構造字符串,或者使用StringBuilder類。否則,你將建立8(從我的例子)不同大小的字符串,你只會使用並保留最後一個。根據具體情況,這可能不會造成問題,但如果您多次調用此代碼,則會加起來。
這裏有一個更好的版本的最終代碼:
Char[] digits = new Char[8]; // change if you want more/fewer digits
for (Int32 index = 0; index < digits.Length; index++)
if ((intNumber & (1 << index)) != 0)
digits[digits.Length - 1 - index] = '1';
else
digits[digits.Length - 1 - index] = '0';
bin = new String(digits);
然而,這裏的踢球。已經有一種方法可以將Int32值轉換爲.NET中充滿二進制數字的字符串,並且它是Convert.ToString方法。唯一的區別是它不添加任何前導零,所以我們必須自己做。
所以,這裏是你應該使用的最終代碼:
String bin = Convert.ToString(intNumber, 2).PadLeft(8, '0');
這將替換整個循環。
你想完成什麼?我不知道VB,那麼你可以擴展你想做什麼嗎? – 2008-12-30 14:49:23
我更新了我的答案,以反映您的位數和變量名稱。你想要的代碼在它的底部。 – 2008-12-30 15:43:28