Sie bitweise Operationen visualisieren können, wenn Sie zB Bit-Werte durch Buchstaben ersetzen:
dec = abcdefghijklmnop
dec2 = ABCDEFGHIJKLMNOP
Zuerst extrahieren Sie die benötigten Bits von DEC2 und ersetzen alle mit Nullen ruhen:
tmp2 = dec2 & 0b0000000000111111;
Hier habe ich mitein binäres wörtlichen bin mitPräfix; Wenn Ihr Compiler dies nicht unterstützt, verwenden Sie ein entsprechendes hexadezimales Literal (wie 0x3f
).
first operand: ABCDEFGHIJKLMNOP
second operand: 0000000000111111
result: 0000000000KLMNOP
dann die Ziel Bits mit Nullen ersetzt werden:
tmp1 = dec & 0b1111111111000000;
first operand: abcdefghijklmnop
second operand: 1111111111000000
result: abcdedghij000000
Schließlich tun eine bitweise OR:
res1 = tmp1 | tmp2;
first operand: abcdedghij000000
second operand: 0000000000KLMNOP
result: abcdefghijKLMNOP
Dies ist eine weit verbreitete Eigenschaft der bitweise ODER-Operation - wenn Einer seiner Eingänge ist Null, es kopiert den anderen zum Ausgang.
Für Ihre zweite Operation benötigen Sie eine bitweise Verschiebung. Ohne in die Details, von denen die Bits Sie benötigen, können Sie immer noch die Visualisierungstechnik mit den Buchstaben verwenden:
temp = (dec2 & 0b0000001111000000) << 2;
dec2 = ABCDEFGHIJKLMNOP
second operand: ......1111......
after bitwise AND: ......GHIJ......
after shift left: ....GHIJ........
Hier habe ich noch einen Punkt .
ein Null-Bit darzustellen.
"vom Ende" - was bedeutet das? Um Verwirrung zu vermeiden, verwenden wir typischerweise die Namen MSB (höchstwertiges Bit) und LSB (niedrigstwertiges Bit). – anatolyg
Auch die Frage wäre klarer, wenn Sie nur eine "Bit-Klonen" -Operation gefragt haben. Wenn Sie wissen, wie man es macht, werden Sie wissen, wie man zwei macht. Oder, wenn es zwei sehr unterschiedliche Operationen gibt, zeigen Sie das gewünschte Ergebnis des ersten und dann das endgültige gewünschte Ergebnis. – anatolyg
@anatolyg es bedeutet LSB, danke! – EmanRuoy