Автор Гілка: Побітові операції  (Прочитано 3616 раз)

Відсутній motya

  • Новачок
  • *
  • дописів: 33
  • Карма: +0/-0
  • I Love YaBB 2!
Побітові операції
« : 2007-12-12 16:04:31 »
Підкажіть будь-ласка, як поступово і безпечно записати у блок даних unsigned char block [n] дані із різних змінних типу long, short, char[m]. Тобто із різних змінних зліпити блок даних. Бажано із прикладом, бо я у побітових операціях профан поки що, а потрібно робити терміново.

Відсутній motya

  • Новачок
  • *
  • дописів: 33
  • Карма: +0/-0
  • I Love YaBB 2!
Re: Побітові операції
« Відповідей #1 : 2007-12-12 16:14:24 »
Ще питання: як із байта зробити протилежний байт? З бітами зрозуміло із 0 - 1 із 1 - 0, а байт як инвертнути оптимально?

Відсутній motya

  • Новачок
  • *
  • дописів: 33
  • Карма: +0/-0
  • I Love YaBB 2!
Re: Побітові операції
« Відповідей #2 : 2007-12-13 23:32:39 »
char extractByteInt(int x, unsigned int n) // x - our int; n - which bit (0-3)
{
    if ( (n > 0) && ( n < 4 ) )
    {
        int mask = pow(2, 8*n) - pow(2, 8*(n - 1));
        return char((x & mask) >> 8*(n - 1)); // ось він -- байт
    }
    else
    {
        return -1;
        std::cerr << "Error: Attempt to extract wrong byte" << std::endl;
    }
}
« Змінено: 2007-12-13 23:33:34 від motya »

Михайло Даниленко

  • Гість
Re: Побітові операції
« Відповідей #3 : 2007-12-14 01:52:57 »
o_O ...
Не простіше та швидше через пойнтери та приведення типів це зорганізувати?..
Типу *(((char *)&int_variable)+byte_offset)

Михайло Даниленко

  • Гість
Re: Побітові операції
« Відповідей #4 : 2007-12-14 02:04:52 »
Стосовно інвертувати: ~some_value_to_invert

Відсутній motya

  • Новачок
  • *
  • дописів: 33
  • Карма: +0/-0
  • I Love YaBB 2!
Re: Побітові операції
« Відповідей #5 : 2007-12-14 14:18:53 »
Цитата
o_O ...
Не простіше та швидше через пойнтери та приведення типів це зорганізувати?..
Типу *(((char *)&int_variable)+byte_offset)

Ой... Дякую. Це напевно набагато швидше!  :D
« Змінено: 2007-12-14 14:19:22 від motya »

Михайло Даниленко

  • Гість
Re: Побітові операції
« Відповідей #6 : 2007-12-14 14:33:27 »
Але не портабельно :(
На big- та little-endian системах воно буде видавати різний результат. Втім,big-endian системи я ніколи не зустрічав.

Відсутній motya

  • Новачок
  • *
  • дописів: 33
  • Карма: +0/-0
  • I Love YaBB 2!
Re: Побітові операції
« Відповідей #7 : 2007-12-14 15:20:00 »
Шож робить? Невже збільшувати код вдвічи...