Also lese ich eine 12-Bit-Ganzzahl aus einem Byte-Array. Diese Zahl kann negativ sein, aber ich kann nicht herausfinden, wie man das in eine verwendbare Variable int16/int32 in C# umwandelt. Ich habe das Gefühl, dass ich etwas mit Bit-Shifting oder anderen bitweisen Operationen machen muss, aber ich bin bisher so weit gegangen. Kann mir jemand in die richtige Richtung zeigen?Konvertiere 12 Bit int in 16 oder 32 Bits
var x = 0xFFF;
Dies muss als -1 ausgedruckt werden, aber C# wird natürlich als int32 ausgegeben und als 4095 ausgegeben. Wenn dies in int16 oder int32 umgewandelt werden muss, behalte ich den negativen Wert bei.
Funktioniert gut, vielen Dank! Verstand erklären, was hier vor sich geht? ich weiß was das >>^| tue aber nicht ganz nachvollziehbar. – Clarke76
Grundsätzlich wird nach rechts geschoben, bis nur noch das Vorzeichenbit übrig ist. Wenn es Null ist, geben wir nur den ursprünglichen Wert zurück. Wenn es 1 ist, nehmen wir -1 (0xFFFFFFFF), schalten die unteren 12 Bits ('xor') aus und dann' or' mit dem ursprünglichen Wert, um die Bits darin einzuschalten. Das Ergebnis ist im Grunde nur die oberen 20 Bits des 32-Bit-Wertes einzuschalten. –
yeah ... ich schrieb alles auf dem Papier und sah genau, was passierte. Das hat wirklich geholfen. Ich habe verstanden, dass das letzte Bit als Flag für Negativ verwendet wird. Danach war es einfach zu folgen. Danke noch einmal. – Clarke76