2017-05-04 65 views
-2

我想從列表框中獲取16位而不是那些位。但我得到錯誤的答案任何人都可以幫助我出了什麼問題?我想Not16位。但答案是錯誤的。爲什麼?

輸入= 1101010101110101 輸出= -1101010101110102

預期的結果是:0010101010001010 這裏是我的代碼。

public static long NotInputEqualWhichBit(String str) 
{ 
     long Input = (Int64.Parse(str)); 
     long notInput = ~Input; 

     return notInput; 
} 

,我稱這種方法波紋管

string listBoxLine = ListBox_content.Items[2].ToString(); 
long res2 = checkLogic_Class.NotInputEqualWhichBit(listBoxLine); 
MessageBox.Show(res2 +""); 
+6

我們不知道您提供了什麼輸入或您期望的值 - 這些應該在*問題*中,而不是在圖片中。請提供[mcve] - 只是一個簡單的控制檯應用程序。請注意,你的圖片看起來像你正在使用二進制 - 'Int64.Parse'將假設十進制... –

+3

使用'Convert.ToInt64(str,2)'二進制字符串長轉換。 – Dukeling

+0

@Jon Skeet我在列表框中突出顯示了輸入,並在消息框中突出顯示了答案 – Mo0rteza

回答

3

你的問題有點含糊,所以我的答案也是如此。

您正在將二進制字符串解析爲int64。基本上,您將11(字符串,但是對於它是二進制值三)轉換爲11(十一進制的十進制值)。

如果你的問題是關於如何「2」位數可以在你的結果展現出來,那麼這就是你的答案:當您轉換您輸入到int64,轉換假設你使用十進制,不是二元的。因此,它解釋了一個不同的數學值。
十進制符號允許超過01,這就是爲什麼2出現。

如果這不是你的問題,請繼續閱讀。

在C#(其他語言)中,您在整數中找到的第一位稱爲「signed」位。如果它是0,你的整數是正數。如果它是1,那麼你的整數是負數。

因爲你是反轉每一位,你也翻轉有符號位;因此將您的價值轉化爲負數。

更改以下行:

long Input = (Int64.Parse(str)); 

爲以下:

ulong Input = (Convert.ToUInt64(str)); 

這是一個無符號long。簡而言之,它沒有有符號位,因此不能變成負數。

1

我認爲最重要的問題是要確定您有16位和反轉這些。這是通過類型化來實現的。

ushort i = 5; 
Console.WriteLine((ushort)~i); 
相關問題