Schalten Sie Bit ganz links eines Short
-
02-10-2019 - |
Frage
Original Frage geändert.
Ich möchte wiederum von der linken Bit eines Short-Wert bitweise (& H8000) und lassen Sie die anderen Bits, wie sie sind.
Dim x = BitConverter.GetBytes(Short.MaxValue Or &H8000)
Dim z = BitConverter.ToInt16(x, 0)
Gibt es keinen kürzeren Weg mit Bitoperatoren?
Wenn ich
Dim a = Short.MaxValue Or &H8000
ich einen Compiler-Fehler, Cuz es nach oben geht, statt sie zu negieren.
Lösung
Das ist, weil .NET verwendet Zweierkomplement, nicht unterzeichnet Größe. Negieren, müssen Sie Flip alle die Bits und dann hinzufügen.
Bitte verwenden Sie einfach die einstellige minus. Bitte ... Bitte, bitte.
EDIT: Wenn aus irgendeinem seltsamen Grund, warum Sie dies tun musste, mit bitweise Operationen, würden Sie haben, dies zu tun:
Dim somewhatCorrect = (Short.MaxValue xor Short.MinValue) + 1;
was natürlich noch nicht bitweise, weil Zweier-Komplement-Negation nicht effizient mit Bitoperatoren erfolgen.
EDIT2: Und hier ist eine einstellige Minus:
Dim correct = -Short.MaxValue;
EDIT3: Als Antwort auf editierte Frage :
Dim x As Short = 42
Dim xWithHighBitOn = x Or Short.MinValue
Andere Tipps
Zwei-Komplement
Dim testV As Short = &HD555S 'a test value
Dim twosC As Short 'twos comp
twosC = (testV Xor &HFFFFS) + 1S 'reverse the bits, add 1
Ändern höchstwertigen Bits
twosC = twosC Xor &H8000S