2016-07-28 12 views
0

Ich habe eine int und ich möchte seinen Wert zu den wichtigsten 8 Bits schreiben. Zum Beispiel sollte der Wert 89 werden 10110010 00000000Schreiben auf MSB o 16 reg

Dies ist, wie ich es tun:

valueToWrite = myVal << 8 | valuetToWrite & 0xf; 

Wie kann ich lesen Sie den ursprünglichen Wert zurück?

+0

Entschuldigung, Sie haben Recht. Ich dachte über unterzeichnet, aber schreiben unsigniert. Der Beitrag wird geändert – Josef

+0

Warum machst du '& 0xf'? – Jesper

Antwort

0

Um den ursprünglichen Wert nach linker Verschiebung (<<) zurückzulesen, einfach den Wert nach rechts verschieben.

myVal = valueToWrite >>> 8; 

Der >>> Bediener verschiebt den Wert nach rechts und geht Nullen in den höchstwertigen Bits.

+0

Hm ... sehr seltsam ... Ich habe Wert 156 von Bit 8 bis 15 geschrieben. Wenn ich Ihr Beispiel versuche, ist der zurückgegebene Wert 16 777 116. – Josef

+0

Ich vermute, dass die Methode, die Sie beschreiben in Ihrer Frage für die Erstellung von "valueToWrite" ist nicht sehr genau. Zuallererst scheint es so, als ob Sie 89 Plätze insgesamt und nicht 8 verschoben haben, und Sie haben eine interessante Rekursion im zweiten Term des bitweisen oder. Was genau hast du probiert? [Hier] (https://gist.github.com/c139d1b19d0ccad3335a918bae344d3c) ist eine Demonstration dessen, worüber ich rede. – gobernador