Solved

How to initialize bitwise parameter ?

Posted on 2014-01-03
4
301 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 86

Assisted Solution

by:jkr
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;

Open in new window

0
 
LVL 75

Accepted Solution

by:
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;

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 Is Transaction Monitoring and who needs it?

Synthetic Transaction Monitoring that you need for the day to day, which ensures your business website keeps running optimally, and that there is no downtime to impact your customer experience.

Question has a verified solution.

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

Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

696 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