2017-02-05 3 views
-8

Ich habe eine Skizze Arduino, die im Wesentlichen C++ ist, dass diese Zeilen von Code darin hat:Was tun die Operatoren | = und << =?

uint32_t cardid = uid[0]; 
cardid <<= 8; 
cardid |= uid[1]; 

Arduino an einen pn532 RFID-Lesegerät angeschlossen ist, so dass im Grunde durchsucht es die Karte, die in Reihe kommt und Drucke die UID darauf.
Aber ich kann nicht verstehen, was die Operatoren | = und < < = tun.
Ich fand online, dass sie etwas mit Vararrays zu tun haben, aber ich habe solche Dinge nie benutzt.

+0

_ "sie haben etwas mit valarrays zu tun" _ Nein. Dies sind die bitweisen OR- und Linksverschiebungsoperatoren. –

+4

Aufgrund fehlender Forschungsanstrengungen abgelehnt. Das ist nicht schwer zu googeln. –

Antwort

3

Im Allgemeinen sind diese Operator Abkürzungen:

a <<= b --> a = a << b 
a |= b --> a = a | b 

In dem gegebenen Beispiel dieser Code erzeugt einen 16-Bit-Wert aus zwei 8-Bit-Werten. Angesichts

uid[0] = 0x12 
uid[1] = 0x34 

dann

uint32_t cardid = uid[0]; // cardid is now 0x12 
cardid <<= 8;    // shifts the value 8 bits to the left -> 0x1200 
cardid |= uid[1];   // applies the OR operator -> 0x1200 | 0x34 = 0x1234 
0

Dies sind bitweise Operatoren (wie Verknüpfungen geschrieben).

cardid < < = 8; ist dasselbe wie cardid = (cardid < < 8); Dies ist eine arithmetische Linksverschiebung, die sich in diesem Fall wesentlich mit 2^8 multipliziert.

cardid | = uid [1]; ist dasselbe wie cardid = (cardid | uid [1]); Dies führt bitweises OR durch, dh es setzt Bits in cardid, die auch in uid gesetzt sind.

1

C++ ermöglicht += *= |= &= ... so im Fall der erste <<= genannt right shift assignment Operator, der eine Verknüpfung ist, die Bits des gleichen lValue von Shifting dann das Ergebnis, um es Zuweisung selbst:

int a = 7; 
a <<= 2; 
a = a << 2; // This line is identical to the one above. 

Der zweite |= ist genannt Bitwise Or Assignment Operator, der eine Verknüpfung von bitweise Oder-ing der Bits des gleichen lValue und dann es das Ergebnis zuordnen selbst:

int a = 7; 
a |= 2; 
a = a | 2; // This line is identical to the one above. 
  • Beide Operatoren arbeiten an Bits.
Verwandte Themen