How to initialize bitwise parameter ?

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
LVL 1
naseeamAsked:
Who is Participating?
 
käµfm³d 👽Commented:
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
 
jkrCommented:
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
 
käµfm³d 👽Commented:
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
 
jkrCommented:
*Argh*, it of course has to be 'OR', this is embarassing ;o)
0
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.

All Courses

From novice to tech pro — start learning today.