Concatenate three 16-bit integers in one 64-bit integer with C++
Use a struct and a union to do what you want.  Note that this implementation is verbose and can be combined into a single declaration.  Also depending on your system architecture, you may need to pack the struct or declare the members in a different order.

typedef struct
{
  uint16_t Low;
  uint16_t Mid;
  uint16_t Hi;
  uint16_t Spare;
} Word64_t;

typedef union
{
  uint64_t Int64Val;
  Word64_t WordVal;
} Splitter_t;

Splitter_t splitter;
splitter.WordVal.Low = 0xaa;
splitter.WordVal.Mid = 0xbb;
splitter.WordVal.Hi = 0xcc;

printf("%x", splitter.Int64Val);  //should print 0xaabbcc