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

  • Автор темы Beavis
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

Beavis

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

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

ultra

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

Beavis

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

Kmet

Java Team
25.05.2006
1 036
8
#4
"бинарные поля" - поясни термин.
Насколько понял задачу, естественного и простого решенмя нет, единственный вариант работать напрямую с памятью, только надо учитывать выравниваение.

и еще: а зачем такой изврат?
 
B

Beavis

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

ultra

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

Kmet

Java Team
25.05.2006
1 036
8
#7
Для: ultra ты не прав. С из тех времен когда и одного байта на флаг было жирно.

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

Kmet

Java Team
25.05.2006
1 036
8
#9
А чего тут рассказывать... Раз язык не позволяет манипулировать с порядком битовых полей в рантайме, то необходимр работать напрямую с их представлением в памяти. Но си не имеет стандартной команды для циклического сдвига, поэтому надо использовать асм вставки и комбинации допустимых битовых опреций. Если представить циклический сдвиг то станет ясно что его реализация допустимыми битовыми опрециями зависит от размера операнда
 
6

62316e

#10
Черт. Сорри.. я не врубался в тему с первого раза.
 
Статус
Закрыто для дальнейших ответов.