LINUX.ORG.RU

Побитовые операции


0

0

С помощью побитовы операций написать функцию, которая копирует n бит, начиная с n-ой в другое двоичное число(переменную) int copy(in/*сюда копирует*/p,n,out/*отсюда*/)


/* когда sizeof(int)==32 */

void copy(int* pdst, int src, unsigned offs, unsigned n)
{
  unsigned x = src;
  unsigned mask = 0xffffffffu >> (32-n);
  *pdst = (((unsigned)src) >> offs) & mask;
}

/* если нужно копировать биты в туже позицию, то: */

void copy(int* pdst, int src, unsigned offs, unsigned n)
{
  unsigned x = src;
  
  unsigned mask = (0xffffffffu >> (32-n)) << offs;
  *pdst &= ~mask;
  *pdst |= src & mask;
}

kosmonavt
()
Ответ на: комментарий от kosmonavt

* все равно какая у int размерность */

void copy(int* pdst, int src, unsigned offs, unsigned n)
{
  unsigned mask = ((unsigned)-1) >> (sizeof(int)*8-n);
  *pdst = (((unsigned)src) >> offs) & mask;
}

/* если нужно копировать биты в туже позицию, то: */

void copy(int* pdst, int src, unsigned offs, unsigned n)
{
   unsigned mask = (((unsigned)-1) >> (sizeof(int)*8-n)) << offs;
   *pdst &= ~mask; *pdst |= src & mask;
}

kosmonavt
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.