2017-05-04 2 views
-2

Ich möchte 16 Bits von Listbox und Not diese Bits erhalten. aber ich bekomme falsche Antwort kann mir jemand helfen, was schief läuft?Ich möchte Not16 Bits. aber die Antwort ist falsch. Warum?

Input = 1101010101110101 Output = -1101010101110102

das erwartete Ergebnis ist: 0010101010001010 hier ist mein Code.

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

     return notInput; 
} 

und ich nannte diese Methode unten

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

Wir wissen nicht, welche Eingaben Sie liefern oder welchen Wert Sie erwarten - diese sollten in der * Frage * stehen, nicht in einem Bild. Bitte geben Sie eine [mcve] - nur eine einfache Konsolen-App. Beachten Sie, dass Ihr Bild aussieht, als ob Sie binär verwenden - "Int64.Parse" wird Dezimal annehmen ... –

+3

Verwenden Sie 'Convert.ToInt64 (str, 2)' für binäre Zeichenfolge zu lange Konvertierung. – Dukeling

+0

@Jon Skeet Ich markierte die Eingabe in Listbox und markierte die Antwort in der Messagebox – Mo0rteza

Antwort

3

Ihre Frage ist ein wenig vage, also wird meine Antwort auch sein.

Sie analysieren eine binäre Zeichenfolge als int64. Im Grunde konvertieren Sie eine 11 (Zeichenfolge, aber für Sie ist es der Binärwert von drei) in eine 11 (Dezimalwert von elf).

Wenn Ihre Frage geht darum, wie ein „2“ digit in Ihrem Ergebnis zeigen kann, dann ist dies Ihre Antwort: Wenn Sie Ihre Eingabe in ein int64 konvertieren, die Umwandlung geht davon aus, dass Sie Dezimalschreibweise verwenden, nicht binär. Daher interpretiert es einen anderen mathematischen Wert.
Dezimalschreibweise erlaubt mehr als nur 0 und 1, deshalb erscheint die 2.

Wenn das nicht Ihre Frage ist, lesen Sie weiter.

In C# (neben anderen Sprachen) wird das erste Bit, das Sie in einer Ganzzahl finden, als "signiertes" Bit bezeichnet. Wenn es 0 ist, ist Ihre Ganzzahl positiv. Wenn es 1 ist, ist Ihre Ganzzahl negativ.

Da Sie jedes Bit invertieren, spiegeln Sie auch das vorzeichenbehaftete Bit; Daher wird dein Wert in eine negative Zahl umgewandelt.

Ändern Sie die folgende Zeile ein:

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

in die folgenden:

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

Dies ist ein unsignedlong. Einfach ausgedrückt, es hat kein vorzeichenbehaftetes Bit und kann daher nicht zu einer negativen Zahl werden.

1

Ich denke, die wichtigste Frage ist, dass Sie sicher machen wollen Sie 16 Bit haben und diese invertieren. Dies geschieht durch typecasting zu ushort.

ushort i = 5; 
Console.WriteLine((ushort)~i); 
Verwandte Themen