Solved

Detect set bits

Posted on 2004-04-14
8
246 Views
Last Modified: 2010-04-15
I need to determine if bits 0, 1, 10 and 11 are set
in unsigned short that is passed to me.

I wrote the code, but there's no way for me to test!
Need to make sure I'm getting it right.
Value passed to me will something like 3515, or so I was told.

Plz help, urgent.
0
Comment
Question by:jd9288
8 Comments
 

Author Comment

by:jd9288
Comment Utility
BTW, the code I have is this:

ReadBit(int dat, int bitno)
{

     int dattest;

     //
     // shift desired bit into rightmost position
     //
     dattest = (dat >> bitno);

     return (dattest & 1);

}
0
 
LVL 6

Assisted Solution

by:joghurt
joghurt earned 150 total points
Comment Utility
unsigned short value = ...;

if ((value & (1 << 0)) != 0) {
  // bit 0 is set
}
if ((value & (1 << 1)) != 0) {
  // bit 1 is set
}
etc.

For bits 0, 1, 10 AND 11 (at the same time) you'd try (1 << 0) | (1 << 1) | (1 << 10) | (1 << 11).
You may be surprised but the above expression gives me 3075 (or 0x0C03) instead of 3515.
So for checking what you want you should write

if ((value & 0x0C03) == 0x0C03) {
// All the required bits are set.
}

OR

if ((value & 0x0C03) != 0) {
// At least one of the required bits are set.
}
0
 
LVL 45

Expert Comment

by:Kdo
Comment Utility
Hi jd9288,

#define BITMASK ((1 << 0) | (1 << 1) | (1 << 10) | 1 << 11))


if (Value == BITMASK)  /*  All bits in bitmask are set, no others are set  */

if (Value & BITMASK)   /*  All bits in bitmask are set, others may be set  */

if (Value & BITMASK)   /*  Any bit in bitmask is set  */



Good Luck,
Kent
0
 
LVL 45

Expert Comment

by:Kdo
Comment Utility
Whoops...

#define BITMASK ((1 << 0) | (1 << 1) | (1 << 10) | (1 << 11))


:-)

0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 45

Expert Comment

by:Kdo
Comment Utility
Man, what a day...

#define BITMASK ((1 << 0) | (1 << 1) | (1 << 10) | (1 << 11))


if (Value == BITMASK)  /*  All bits in bitmask are set, no others are set  */

if ((Value & BITMASK) == BITMASK)  /*  All bits in bitmask are set, others may be set  */

if (Value & BITMASK)   /*  Any bit in bitmask is set  */


0
 
LVL 4

Assisted Solution

by:bkfirebird
bkfirebird earned 150 total points
Comment Utility
>> I need to determine if bits 0, 1, 10 and 11 are set
does this mean you want  to check whether the four least significant bits of the number are set?
your ReadBit function looks fine ... you can check if a particular bit is set by calling .....

if (ReadBit(num, 1)) // bit is set
// do something

0
 
LVL 45

Accepted Solution

by:
Kdo earned 200 total points
Comment Utility
You can test this easy enough.

#define BITMASK ((1 << 0) | (1 << 1) | (1 << 10) | (1 << 11))

unsigned int TestBit (unsigned integer Value)
{
  unsigned int Result;

  Result = Value & BITMASK;
  printf ("Test Value = %8.8x, Mask=%8.8x, Result=%8.8x\n", Value, BITMASK, Result);
}

If the displayed value for Result is the same as for BITMASK, then all bits in the bitmask were set in the original word.


Kent
0
 

Author Comment

by:jd9288
Comment Utility
Thank you all.
0

Featured Post

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
port mapped I/o query 10 137
Eclipse Luna does not see MinGW 5 234
Way to improve it 16 59
Line meaning 9 75
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now