2016-01-11 8 views
8

I das folgende Stück von Beispiel Code haben:C# uint ushort Überlauf wie in native C

UInt16 a = 0x3A; 
UInt16 b = 0xFFDF; 
UInt16 result = Convert.ToUInt16(a - b); 

Leitung 3 mit einer Überlauffehler Ausnahme. Allerdings möchte ich das gleiche Ergebnis erzielen, wie ich 2 unsigned Shorts in C subtrahieren würde und sie über-/Unterlauf.

Was ist der beste Weg, dies zu erreichen?

Antwort

9

könnten Sie maskieren unteren 16 Bits wie folgt:

UInt16 result = Convert.ToUInt16((a - b) & 0xffff); 
+0

Sie auch die [ungeprüften Kontext] verwenden (https://msdn.microsoft.com/library/a569z7k8.aspx): 'ushort result = unchecked ((ushort) (ab)); ' –