?
Solved

How to initialize bitwise parameter ?

Posted on 2014-01-03
4
Medium Priority
?
316 Views
Last Modified: 2014-01-03
struct ParameterDef
{
   ....
   /* bit 0 indicates if the parameter is special or not.  It it's special read remaining bit(s)
       to find the specialty. */
   /* bit 0 -   special 1, not special 0
       bit 1 -   map modbus register value to whole number
       bits 2 - 15    -   reserved for future use
  */    
   unsigned short special_param_bits;
}

Open in new window


There is array of above structure.  

How to initialize special_param_bits variable with symbols instead of numbers ?
For special array entires, I want to indicate that the paramter is special and what specialty it has.  i.e. SPECIAL & MAP_MODBUS_REG
0
Comment
Question by:naseeam
  • 2
  • 2
4 Comments
 
LVL 86

Assisted Solution

by:jkr
jkr earned 800 total points
ID: 39754594
You already have it, the bitwise AND (&) will help you here

#define SPECIAL 1 // LSB == bit 0, or '1 << 0'
#define MAP_MODBUS_REG (1 << 5) // assuming it is bit 5
ParameterDef pd;

pd.special_param_bits = SPECIAL & MAP_MODBUS_REG;

Open in new window

0
 
LVL 75

Accepted Solution

by:
käµfm³d   👽 earned 1200 total points
ID: 39754601
Use the bitwise operators with the appropriate flags. In this case, to set it you will use bitwise OR if you have multiple things to set.

e.g.

const short FLAG_SPECIAL =    0x80000000;
const short FLAG_MAP_MODBUS = 0x40000000;

struct ParameterDef instance;
instance.special_param_bits = FLAG_SPECIAL | FLAG_MAP_MODBUS;

Open in new window


Each flag needs to be a power of 2 in its value, since each flag's value represents a bit position within the short. Speaking in bits, your flags look like this:

const short FLAG_SPECIAL =    1000 0000 0000 0000;
const short FLAG_MAP_MODBUS = 0100 0000 0000 0000;

Open in new window

0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 39754620
For correctness, jkr's suggestion of bitwise AND is actually incorrect. AND is for querying if a bit has been set; OR is used for setting the bit. In other words, 1 & 0 == 0 whereas 1 | 0 == 1.
0
 
LVL 86

Expert Comment

by:jkr
ID: 39755587
*Argh*, it of course has to be 'OR', this is embarassing ;o)
0

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

There is an easy way, in .NET, to centralize the treatment of all unexpected errors. First of all, instead of launching the application directly in a Form, you need first to write a Sub called Main, in a module. Then, set the Startup Object to th…
Q&A with Course Creator, Mark Lassoff, on the importance of HTML5 in the career of a modern-day developer.
The viewer will learn how to implement Singleton Design Pattern in Java.
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.

568 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