Erst die entsprechenden Bits mit einem UND mit 0 löschen. Dann eventuell das oberste Bit des neuen Werts auch auf 0 setzen wenn das nicht schon der Fall ist. Dann mit dem neuen Wert verordern.
Wenn du z.B. && 0xFFFFFF00 machst, wird das unterste Byte auf 0 gesetzt. Bei 7 Bits willst du && 0xFFFFFF80 wenn ich es richtig sehe
Chris72622:
wie kopiert man die Bits 0-6 eines Bits an die Bits 0-6 eines unsigned longs, ohne dass sich die oberen (linken) Bits des unsigned longs ändern?
In Langform zum Verstehen mit Kommentaren:
// die niederwertigsten 7 Bits löschen durch Rechtsschieben und Linksschieben
target= (target>>7)<<7;
// Und dann eine bitweise Oder-Verknüpfung anwenden
target= target | basis;
Das kann man aber auch als Einzeiler schreiben.
Nachtrag: Kleine Korrektur "Bits 0-6" sind ja sieben Bits.
Bei dem Oder muss man aber aufpassen was im obersten Bit von "basis" steht! Das muss auch 0 sein damit man nicht das oberste Bit des Ziels überschreibt.
EDIT:
grr auch falsch gezählt. Es man muss nur beim obersten Bit aufpassen. Das ist in den Beispiel 0, aber je nach Anwendung eventuell nicht immer
Serenifly:
Bei dem Oder muss man aber aufpassen was in den oberen 2 Bits von "basis" steht! Die Bits müssen auch 0 sein damit sie nicht die Bits 7 und 8 des Ziels überschreiben.
Gerade gesehen und in meinem vorherigen Posting korrigiert: Er möchte 7 Bits setzen ("Bits 0-6" sind sieben Stück).
Bei dem von mir geposteten Code darf in "basis" das oberste Bit dann natürlich nicht gesetzt sein.
Wenn es doch gesetzt sein kann und nur 7 Bits gesetzt werden sollen, müßte noch das oberste Bit gelöscht werden, bevor die Oder-Verknüpfung durchgeführt wird. Mein Code ist dafür vorgesehen, dass in "basis" das höherwertigste Bit nicht gesetzt ist. Aber das könnte man ja leicht modifizieren.