Solved

How to initialize bitwise parameter ?

Posted on 2014-01-03
292 Views
``````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;
}
``````

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
Question by:naseeam
• 2
• 2

LVL 86

Assisted Solution

jkr earned 200 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;
``````
0

LVL 75

Accepted Solution

käµfm³d   👽 earned 300 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;
``````

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;
``````
0

LVL 75

Expert Comment

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

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

Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
zeroMAx challenge 20 87
upcasting down casting object remains same but refernece changes 8 60
Problem to open text file 11 70