Je voulais remplacer bit/bits (plus de 1) dans un champ de données 32/64 bits sans affecter les autres bits.Say par exemple:Comment remplacer bits dans un champ de bits sans affecter les autres bits en utilisant c
I avoir un registre de 64 bits où les bits 5 & 6 peuvent prendre des valeurs 0,1,2,3.
5:6
0 0
0 1
1 0
1 1
Maintenant, quand je lis le registre que je reçois dire la valeur 0x146 (0001 0 10 0 0110) .Maintenant je veux changer la valeur à la position de bit 5 et 6 à 01. (en ce moment, il est 10 qui est 2 en décimal et je veux le remplacer au 1 e 01) sans autres bits se touchés et écrire de nouveau le registre avec des bits seulement 5 & 6 modifié. (il devient 126 après avoir changé)
J'ai essayé de le faire
reg_data=0x146
reg_data |= 1 << shift (shift in this case is 5)
Si je fais cette valeur aux positions de bit 5 & 6 deviendra 11 (0x3) pas 01 (0x1) ce que je voulais.
- Comment faire pour lire/modifier/écrire?
- Comment est-ce que je remplace seulement certains bits/bits dans des champs de 32/64 bits sans affecter les données entières du champ utilisant C?
Réglage d'un bit est correct, mais plus d'un bit, je trouve cela peu difficile.
Toutes les suggestions sont très appréciées.
+1. De plus, si vous savez qu'ils sont adjacents, cela devient plus simple: par exemple, dans ce cas, 'reg_data = reg_data & (~ (3 << 5)) | (1 << 5) ' – Amadan