2016-07-23 87 views
0

I 16-Bits-Register haben, die einige Werte in LSB und MSB enthalten:Erste Wert von MSB von 16-Bit-Register

LSB:
Bei Bit 0 ... 1 der Wert 0
Bei Bit 2 den Werten 0

MBS:
Bei MSB-I-Wert 20

012.351.641 schreiben müssen

So ist der Wert, der im Register geschrieben werden soll, ist 0 + 0 + 20 = 160

Wenn ich mir anmelden gerade lese das ich es auf diese Weise so machte:

für den ersten Wert in Bit [0 ... 1]:

firstVal = (valFromReg & (((1 << 2)-1) << 1)/2) 
secondVal = (valFromReg & 4)/4 

Aber wie liest/konvertiert man den dritten Wert, um die Zahl 20 zu erhalten?

Antwort

1

In Java eine short ist ein (signiert) 16-bi t Wert.Sie möchten, dass in drei Werte teilen:

  • Wert a in Bits 0-1
  • Wert b ein 2-Bit-Wert ist ein 1-Bit-Wert in Bit 2
  • Wert c ist ein 13 -Bit-Wert in den Bits 3-15

Bit-weise, die wie folgt dargestellt werden kann: cccc cccc cccc cbaa

zu extrahieren, die 3 Werte aus dem 16-Bit-012.398.Wert, würden Sie dies tun:

short reg = /*register value*/; 
int a = reg & 0x0003; 
int b = (reg >> 2) & 0x0001; 
int c = (reg >> 3) & 0x1fff; 

den anderen Weg zu gehen, würden Sie dies tun:

short reg = (short)((c << 3) | (b << 2) | a); 

Dies setzt natürlich voraus, dass die Werte innerhalb Wertebereich, dh a = 0-3, b = 0-1 und c = 0-8191.

0

Manches in der Frage nicht ganz klar für mich ... wie:

Bei MSB muss ich Wert 20

zurück in meine Zeiten MSB schreiben war nur 1 bit und konnte nur richtig oder falsch schreiben ...

anyways ...

Ein 16-Bit-Signal ziemlich gut in einer ganzen Zahl passt ... so könnte man im Grunde dieses Register erhalten und es als eine ganze Zahl zu manipulieren, dann darstellt, dass als eine binäre Zahl AS STRING Willen können Sie die MSB erhalten oder sogar das Bit an jede gewünschte Position ...

tun:

Beispiel

int register = -128; 
String foo = String.format("%16s", Integer.toBinaryString(register)).replace(' ', '0'); 
System.out.println(register); 
System.out.println(foo); 
System.out.println(foo.charAt(0)); //char at 0 is the MSB.... 
+1

Vielleicht erkläre ich mein Problem ein bisschen falsch. Wie ich in meinem ersten Post erklärt habe, sind die ersten 3 Bits für einige Werte reserviert. Vom Bit [0 ... 1] ist der Maximalwert 3, der Bit 2-Wert kann 0 oder 1 sein und der dritte Wert kann zwischen 0 und 255 liegen. Mein Problem ist, wie dieser dritte Wert gespeichert und aus dem Register ausgelesen wird? – Josef