#include <windows.h>
//вспомогательная структура для способа №1
struct s_change
{
private:
union
{
DWORD dwd32;
struct
{
DWORD bit00:1;
DWORD bit01:1;
DWORD bit02:1;
DWORD bit03:1;
DWORD bit04:1;
DWORD bit05:1;
DWORD bit06:1;
DWORD bit07:1;
DWORD bit08:1;
DWORD bit09:1;
DWORD bit10:1;
DWORD bit11:1;
DWORD bit12:1;
DWORD bit13:1;
DWORD bit14:1;
DWORD bit15:1;
DWORD bit16:1;
DWORD bit17:1;
DWORD bit18:1;
DWORD bit19:1;
DWORD bit20:1;
DWORD bit21:1;
DWORD bit22:1;
DWORD bit23:1;
DWORD bit24:1;
DWORD bit25:1;
DWORD bit26:1;
DWORD bit27:1;
DWORD bit28:1;
DWORD bit29:1;
DWORD bit30:1;
DWORD bit31:1;
};
};
public:
static DWORD get_changed_bits(DWORD dwd)
{
s_change Xsrc;
s_change Xdst;
Xsrc.dwd32=dwd;
Xdst.bit00=Xsrc.bit31;
Xdst.bit01=Xsrc.bit30;
Xdst.bit02=Xsrc.bit29;
Xdst.bit03=Xsrc.bit28;
Xdst.bit04=Xsrc.bit27;
Xdst.bit05=Xsrc.bit26;
Xdst.bit06=Xsrc.bit25;
Xdst.bit07=Xsrc.bit24;
Xdst.bit08=Xsrc.bit23;
Xdst.bit09=Xsrc.bit22;
Xdst.bit10=Xsrc.bit21;
Xdst.bit11=Xsrc.bit20;
Xdst.bit12=Xsrc.bit19;
Xdst.bit13=Xsrc.bit18;
Xdst.bit14=Xsrc.bit17;
Xdst.bit15=Xsrc.bit16;
Xdst.bit16=Xsrc.bit15;
Xdst.bit17=Xsrc.bit14;
Xdst.bit18=Xsrc.bit13;
Xdst.bit19=Xsrc.bit12;
Xdst.bit20=Xsrc.bit11;
Xdst.bit21=Xsrc.bit10;
Xdst.bit22=Xsrc.bit09;
Xdst.bit23=Xsrc.bit08;
Xdst.bit24=Xsrc.bit07;
Xdst.bit25=Xsrc.bit06;
Xdst.bit26=Xsrc.bit05;
Xdst.bit27=Xsrc.bit04;
Xdst.bit28=Xsrc.bit03;
Xdst.bit29=Xsrc.bit02;
Xdst.bit30=Xsrc.bit01;
Xdst.bit31=Xsrc.bit00;
return Xdst.dwd32;
}
};
void main()
{
const DWORD dwdNum=0x12345678;
//первый способ, при помощи битовых полей
DWORD dwdResult1=s_change::get_changed_bits(dwdNum);
//второй способ, перестановка в цикле
DWORD dwdResult2=0;
DWORD dwdScanMask=0x00000001;//самый младший бит
DWORD dwdSetMask_=0x80000000;//самый старший бит
for(;dwdScanMask;)
{
if(dwdNum&dwdScanMask)
{
dwdResult2|=dwdSetMask_;
}
dwdScanMask<<=1;
dwdSetMask_>>=1;
}
//сравниваем результаты обоих методов
if(dwdResult1==dwdResult2)
{
//методы выдали одинаковый результат
}
else
{
//где то ошибка
}
}
1 способ - быстрее
2 способ - чуточку медленнее