@Dave Thank You very much :) On Jun 27, 8:48 pm, piyush kapoor <[email protected]> wrote: > thanks a lot for the wonderful explanation :-) > > > > > > > > > > On Mon, Jun 27, 2011 at 7:17 PM, Dave <[email protected]> wrote: > > @Rajeev and Piyush: Numbering the bits from the right starting with 0 > > as usual, you see that you need to move the even-numbered bits one bit > > to the left and the odd-numbered bits one bit to the right. You could > > do this one bit-pair at a time, but it would be more efficient if you > > could do all pairs simultaneously. So how can you pick out all of the > > even-numbered bits at the same time? By using the logical and of the > > data with a mask that has 0s in the odd bit positions and 1s in the > > even bit positions. I.e., anding x with 01010101 in binary, which is > > 0x55 in hexadecimal. Once you have isolated the even numbered bits, > > you shift them left one place. The result is (x & 0x55) << 1. > > Similarly, you want to isolate the odd-numbered bits and shift them > > right one place. You could do that by anding with the mask 10101010 > > (binary) = 0xAA, and then shifting right: (x & 0xAA) >> 1. This > > introduces another constant, which might not be as efficient as > > reusing the previous constant 0x55, which can be done by shifting > > right first and then anding: (x >> 1) & 0x55. Now that we have the two > > sets of bits in the correct positions, we simply need to combine them, > > and the logical or operator does that just fine. The overall result is > > (x & 0x55) << 1) | ((x >> 1) & 0x55). > > > Dave > > > On Jun 27, 7:53 am, piyush kapoor <[email protected]> wrote: > > > Yep,I also want to know the same.. > > > > On Mon, Jun 27, 2011 at 6:23 PM, rajeev bharshetty <[email protected] > > >wrote: > > > > > @ Dave How to think about the answer to the above question . I mean How > > do > > > > I tackle such problems ? > > > > > On Mon, Jun 27, 2011 at 6:17 PM, Dave <[email protected]> wrote: > > > > >> y = ((x & 0x55) << 1) | ((x >> 1) & 0x55). > > > > >> Note, 0x55 = 01010101 in binary. > > > > >> Dave > > > > >> On Jun 27, 7:18 am, rShetty <[email protected]> wrote: > > > >> > Given a byte, write a code to swap every two bits. [Using bit > > > >> > operators] > > > > >> > Eg: Input: 10 01 11 01 Output: 01 10 11 10 > > > > >> -- > > > >> You received this message because you are subscribed to the Google > > Groups > > > >> "Algorithm Geeks" group. > > > >> To post to this group, send email to [email protected]. > > > >> To unsubscribe from this group, send email to > > > >> [email protected]. > > > >> For more options, visit this group at > > > >>http://groups.google.com/group/algogeeks?hl=en. > > > > > -- > > > > You received this message because you are subscribed to the Google > > Groups > > > > "Algorithm Geeks" group. > > > > To post to this group, send email to [email protected]. > > > > To unsubscribe from this group, send email to > > > > [email protected]. > > > > For more options, visit this group at > > > >http://groups.google.com/group/algogeeks?hl=en. > > > > -- > > > *Regards,* > > > *Piyush Kapoor,* > > > *CSE-IT-BHU*- Hide quoted text - > > > > - Show quoted text - > > > -- > > You received this message because you are subscribed to the Google Groups > > "Algorithm Geeks" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group at > >http://groups.google.com/group/algogeeks?hl=en. > > -- > *Regards,* > *Piyush Kapoor,* > *CSE-IT-BHU*
-- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.
