циклический сдвиг полей

Тема в разделе "Общие вопросы по С и С++", создана пользователем Beavis, 27 май 2006.

Статус темы:
Закрыта.
  1. Beavis

    Beavis Гость

    имеется следующая задача:
    Код (Text):
    Пусть имеется файл, в котором информация разбита по пяти полям.
    Произведите циклический сдвиг полей: 1 2 3 4 5 -> 5 4 3 2 1

    помогите разобраться, пожалуйста, с этой задачей... :blink:
     
  2. ultra

    ultra Гость

    Напиши подробнее что тебе нужно.
    Просто считать из файла поля и переписать файла с полями в обратном порядке?
     
  3. Beavis

    Beavis Гость

    загружать из файла поля и сохранять их в файл я уже сам разобрался как...
    осталось только научиться в цикле менять местами бинарные поля в структуре...
    надеюсь, кто нибудь подскажет как)
     
  4. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    "бинарные поля" - поясни термин.
    Насколько понял задачу, естественного и простого решенмя нет, единственный вариант работать напрямую с памятью, только надо учитывать выравниваение.

    и еще: а зачем такой изврат?
     
  5. Beavis

    Beavis Гость

    т.е. не бинарные а битовые поля...
    т.е. например
    Код (Text):
    struct _bit
    {
    int b1:2;
    int b2:3;
    int b3:1;
    } bit;
    вот=)
    а нужно это чтоб зачет в институте получить)) больше ни для чего
     
  6. ultra

    ultra Гость

    Хмм,интересно а как это ты собрался считывать битовые поля,если к примеру тот же char занимает 1 байт? ;)
     
  7. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Для: ultra ты не прав. С из тех времен когда и одного байта на флаг было жирно.

    Средствами языка ни битовые ни обычные поля в рантайме не подвигуешь. Придется биты ручками двигать. Тут или асамблевровские вставки или что то такое value=(value<<shift)|(value>>(32-shift))(это для DWORD). ТОлько здесь можно косяков наловить на расширении(под этим я понимаю что если ты объявишь struct {unsigned i:1} то размер струтуры будет никак не 1 бит, а как минимум 1 байт, а то и все четыре). В общем читай стандарт, какая организация битовых полей гарантируется, а какая зависит от релаизации компилятора. Хотя если это только для зачета, то можно и методом тыка
     
  8. 62316e

    62316e Гость

    Опа. Тепеть давай росказывай к чему тут асм, твой код и DWORD o_O
     
  9. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    А чего тут рассказывать... Раз язык не позволяет манипулировать с порядком битовых полей в рантайме, то необходимр работать напрямую с их представлением в памяти. Но си не имеет стандартной команды для циклического сдвига, поэтому надо использовать асм вставки и комбинации допустимых битовых опреций. Если представить циклический сдвиг то станет ясно что его реализация допустимыми битовыми опрециями зависит от размера операнда
     
  10. 62316e

    62316e Гость

    Черт. Сорри.. я не врубался в тему с первого раза.
     
Загрузка...
Похожие Темы - циклический сдвиг полей
  1. Boatswain
    Ответов:
    3
    Просмотров:
    897
  2. elena1991
    Ответов:
    0
    Просмотров:
    1.075
  3. teroni
    Ответов:
    2
    Просмотров:
    1.851
  4. Kmet
    Ответов:
    2
    Просмотров:
    3.051
Статус темы:
Закрыта.

Поделиться этой страницей