#include <iostream>
using namespace std;
struct Inst
{
int num1;
int num2;
int num3;
};
int bitCpy(Inst &a, int Inst::*member, int b, int c, int d)
{
int range = d - c;
b <<= (32 - d);
b >>= (32 - range);
a.*member = b; // a.num1, a.num2, a.num3 ... etc
return b;
}
int main()
{
Inst i = {};
bitCpy(i, &Inst::num1, 12345, 0, 31);
bitCpy(i, &Inst::num2, 67890, 0, 31);
cout << i.num1 << endl;
cout << i.num2 << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEluc3QKewoJaW50IG51bTE7CglpbnQgbnVtMjsKCWludCBudW0zOwp9OwoKaW50IGJpdENweShJbnN0ICZhLCBpbnQgSW5zdDo6Km1lbWJlciwgaW50IGIsIGludCBjLCBpbnQgZCkKewogICAgaW50IHJhbmdlID0gZCAtIGM7CiAgICBiIDw8PSAoMzIgLSBkKTsKICAgIGIgPj49ICgzMiAtIHJhbmdlKTsKICAgIGEuKm1lbWJlciA9IGI7IC8vIGEubnVtMSwgYS5udW0yLCBhLm51bTMgLi4uIGV0YwogICAgcmV0dXJuIGI7Cn0KCmludCBtYWluKCkKewoJSW5zdCBpID0ge307CgliaXRDcHkoaSwgJkluc3Q6Om51bTEsIDEyMzQ1LCAwLCAzMSk7CgliaXRDcHkoaSwgJkluc3Q6Om51bTIsIDY3ODkwLCAwLCAzMSk7Cgljb3V0IDw8IGkubnVtMSA8PCBlbmRsOwoJY291dCA8PCBpLm51bTIgPDwgZW5kbDsKCXJldHVybiAwOwp9