Boвa (13.07.2018 22:07 - 14.07.2018 00:35, просмотров: 162) ответил mut на А для не unsigned char, хотя бы для unsigned short, как ваша функция Reverse() будет выглядеть?
Для 16 бит и 32 бит. Дальше по аналогии с 32 битником UPD Умный компилятор сам бы должен разворачивать сдвиги больше 8 бит в обмен байтами, но не всякий так делает. Поэтому реверсируем биты в границах байта, а потом просто меняем байты местами. 
Конечно это не лучший вариант, гораздо лучше такое писать на асме используя все доступные регисты.     
Функция byte Reverse(byte X) была выше
typedef byte*  pbyte;
typedef short* pshort;
typedef int*  pint;
short int Reverse16(short int &X)
{ byte Y[2];
  pbyte A = pbyte(&X);
  Y[1] = Reverse(*(A+0));
  Y[0] = Reverse(*(A+1));
  return *(pshort(Y));
}
int Reverse32(int &X)
{ byte Y[4];
  pbyte A = pbyte(&X);
  byte i,j=3;
  for(i=0;i<4;i++,j--)
    {Y[i] = Reverse(*(A+j));}
  return *(pint(&Y[0]));
}
Если есть макросы доступа к байтам используйте их вместо конструкций с адресами