2014-02-05 49 views
1

經過一個練習,我試圖獲得一個整數,在某個位置是否爲0或1。嘗試按位取得0或1,但得到64或32代替

這是到目前爲止我的代碼:

Console.WriteLine("input number"); 
int number = int.Parse(Console.ReadLine()); 

Console.WriteLine("input position"); 
int position = int.Parse(Console.ReadLine()); 

int place = 1; 
int bit = place << position; 
Console.WriteLine(bit); 

所以用戶輸入一個數字(整數,讓說,10),則位位置(可以說5),如果還是沒有程序應該告訴我第5位(從右邊)是0或1。

但是不是它告訴我,一位表示的值(1,2,4,8,16,32,64等)

我真的不確定什麼我已經錯過了,我繼續看解決方案(我意識到不需要用戶輸入),並給了我同樣的錯誤。

int n = 35; 
int p = 6; 
int i = 1; 
int mask = i << p; 

問題引述說:「數字(0或1)中位置p上的位的值」。所以它需要0或1作爲輸出。所以我很難過,真的需要一些幫助。我可能會過度看待事物並且忽略一些明顯的東西,但我找不到解決方案。

+3

你沒有做與你讀取的'數值'比較的值('Console.WriteLine(bit);') – Joe

回答

1
int n = 35; 
int p = 6; 
int i = 1; 
int mask = i << p; 

此時,您有mask == 64n == 35。現在您需要以某種方式檢查或應用面罩。一個好辦法是使用& operator,這是一個按位與。如果掩碼的一位設置爲1(如您的mask),則會告訴您n是否將該位設置爲10

int masked = n & mask; 
// masked will be 0 or 64; since we want 0 or 1... 
int result = masked != 0 ? 1 : 0; 
// although I'd go with a bool if possible, because it makes more sense 
bool boolResult = masked != 0; 
1

你需要按位AND&運營商

int place = 1; 
int bit = place << position; 

if((number & bit) == bit) Console.WriteLine("{0}. bit is 1",position); 
else Console.WriteLine("{0}. bit is 0", position); 
+0

@AlexD是的,正好。謝謝 :) –