Quantcast
Channel: CodeGuru Forums - Visual C++ Programming
Viewing all articles
Browse latest Browse all 3029

switch case or if else ?

$
0
0
Hello,

I have to extract the info reg rank32 (5bits), rank16(4bits), rank8(3 bits), rank4(2bits), rank2(1bit), rank1(1bit) from the encoded 16 bits

// Extract the bits from the encoded rank infomation for each of the Antenna elements, as below.
// | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
// --------------------------------------------------------------------------------------------------------------
// <------------ 32 elt -------------> <-------- 16 elt ------> <---- 8 elt ----> <- 4elt --> <-2elt-> <-NoData->
i.e if the last bit is 0, then its no data: rank32 = rank16=rank8=rank4=rank2=rank1=0
if the encoded info is : 1 then : rank32 = rank16=rank8=rank4=rank2=rank1=1
for other encoded info: then we extract the rank as follows:
rank1= 1
rank2 = Bit1 value +1
rank4= Bit 3 and 4 +1
rank8 = bit 6, 5, 4 +1
rank16 = bit 10, 9, 8, 7 +1
rank32 = bit 15, 14, 13, 12 +1

So I have written following two alternatives: could u comment which is better and any other comments please ?

Code:

        ASSERT_ONCE(usRank1elt == 0 && usRank2elt == 0 && usRank4elt == 0 && usRank8elt == 0 && usRank16elt == 0 && usRank32elt == 0);
        unsigned short usRank = usEncodedRank;

        switch (usRank)
        {
                case 0: break;
                case 0x01:
                {
                        usRank1elt = 1; usRank2elt = 1; usRank4elt = 1; usRank8elt = 1; usRank16elt = 1; usRank32elt = 1;
                }
                break;

                default:
                {
                        usRank1elt = 1;

                        usRank = usRank >> 1;
                        usRank2elt = (usRank & 0x01) + 1;

                        usRank = usRank >> 1;
                        usRank4elt = (usRank & 0x03) + 1;

                        usRank = usRank >> 2;
                        usRank8elt = (usRank & 0x07) + 1;

                        usRank = usRank >> 3;
                        usRank16elt = (usRank & 0x0f) + 1;

                        usRank = usRank >> 4;
                        usRank32elt = (usRank & 0x1f) + 1;
                }
                break;
        }

Other way is :
Code:

        ASSERT_ONCE(usRank1elt == 0 && usRank2elt == 0 && usRank4elt == 0 && usRank8elt == 0 && usRank16elt == 0 && usRank32elt == 0);
        unsigned short usRank = usEncodedRank;

        if (usRank & 0x01)
        {
                usRank1elt  = 1;
                usRank2elt  = 1;
                usRank4elt  = 1;
                usRank8elt  = 1;
                usRank16elt = 1;
                usRank32elt = 1;
        }
        else
        {
                usRank1elt = 1;

                usRank = usRank >> 1;
                usRank2elt = (usRank & 0x01) + 1;

                usRank = usRank >> 1;
                usRank4elt = (usRank & 0x03) + 1;

                usRank = usRank >> 2;
                usRank8elt = (usRank & 0x07) + 1;

                usRank = usRank >> 3;
                usRank16elt = (usRank & 0x0f) + 1;

                usRank = usRank >> 4;
                usRank32elt = (usRank & 0x1f) + 1;
        }

Thanks a lot
pdk

Viewing all articles
Browse latest Browse all 3029

Latest Images

Trending Articles



Latest Images