Daniela Morais
Daniela Morais

Reputation: 2247

Change the bit position in a bitmask

I need to change the order between bit in position 1 and position 2 (starting to count from right to left). How can I do this?

Input Output
1010 1100
1110 1110
0101 0011

I'm trying something such as:

1010 & 0010 to get only the bit in position 1

1010 & 0100 to get only the bit in position 2

my_result = (1010 & 0010) << 1

And after that I need to apply an AND operation with the last 2 digits

partial_result = my_result & 0010

And after that apply some operation to order the position 2 but it seems complicated.

Upvotes: 0

Views: 46

Answers (1)

yxz
yxz

Reputation: 118

after you use the and to get the bits in position 1 and 2, you can left shift one and right shift the other and and it back.

input = 1010
bitpos1 = input & 0010
bitpos1 = bitpos1 << 1
bitpos2 = input & 0100
bitpos2 = bitpos2 >> 1

output = input & 1001  // filter out bits 1 and 2
output = output | bitpos1 | bitpos2

Upvotes: 1

Related Questions