Ich habe ein 32-Bit-Integer und möchte nur die untere Hälfte dieser Variablen ansprechen. Ich weiß, dass ich in ein Bit-Array und in Int16 konvertieren kann, aber gibt es einen einfacheren Weg, das zu tun?
Antworten
Zu viele Anzeigen?Wenn Sie nur die untere Hälfte möchten, können Sie diese einfach umwandeln: (Int16)my32BitInt
Im Allgemeinen, wenn Sie Bitmuster auf diese Weise erweitern/kürzen, müssen Sie vorsichtig sein mit den Vorzeichen - vorzeichenlose Typen können weniger Überraschungen verursachen.
Wie in den Kommentaren erwähnt - wenn Sie Ihren Code in einen 'checked' Kontext eingeschlossen haben oder Ihre Compileroptionen so geändert haben, dass der Standardwert 'checked' ist, dann können Sie eine Nummer nicht so ohne Exception abkürzen, wenn nicht alle Bits, die verworfen werden, Null sind - in dieser Situation müssten Sie Folgendes tun:
(UInt16)(my32BitInt & 0xffff)
(Die Option, vorzeichenbehaftete Typen zu verwenden, entfällt in diesem Fall, weil Sie & 0x7fff
verwenden müssten, was dann nur 15 Bits behält)
Sie können implizites Gespräch zum Int16
verwenden, wie zum Beispiel;
(Int16)2;
aber seien Sie vorsichtig, wenn Sie das tun. Denn Int16
kann nicht alle möglichen Werte von Int32
halten.
Zum Beispiel wird dies nicht funktionieren;
(Int16)2147483683;
weil Int16
32787
als maximalen Wert halten kann. Sie können das unchecked (C# Reference)
Schlüsselwort in solchen Fällen verwenden.
Wenn Sie eine nicht überprüfte Operation erzwingen, sollte ein Cast funktionieren:
int r = 0xF000001;
short trimmed = unchecked((short) r);
Dies wird den Wert von r
abschneiden, um in ein Short zu passen.
Wenn der Wert von r
immer in ein short
passen sollte, können Sie einfach einen normalen Cast durchführen und eine Ausnahme auslösen lassen.
- See previous answers
- Weitere Antworten anzeigen