| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Игры в сжатие |
| Автор: Chaos A.D. 3.3.2006, 15:56 | ||
Есть в одной известной книге одно известное задание - написать программу, которая бы сохраняла результат шахматной партии. Причем, желательно, чтобы один ход занимал минимальное количество данных. Вот часть моего кода :
По логике вещей, TurnRep должен занимать 2 байта (с правильно поставленным выравниванием, естесственно). Но у меня он, блин, равен 4. Я несчастный обладатель BCB6, другого компилера сейчас под рукой нет. Буду очень признателен, если кто-нибудь проверит, мой код на своем компилере. Или, может, я где нибудь ошибся? |
| Автор: Romikgy 3.3.2006, 16:09 |
| по идее твой код занимает 3 байта , без выравнивания 12+3+3+3+3=24 24/8=3 |
| Автор: Дрон 3.3.2006, 16:13 |
| Chaos A.D., Замени первый unsigned на short А оставшиеся 4 на char Во всяком случае в VC++ 7 сработало А вообще это выглядит ужасно... Совмещать класс С++ с битовым полем Добавлено @ 16:14 Нет. Там же union. Общий объём 12 бит -- выделяется 2 байта. |
| Автор: Romikgy 3.3.2006, 17:19 |
| Точно проглядел , сорри |
| Автор: Chaos A.D. 3.3.2006, 19:02 |
| maxim1000, спасибо, очень любопытно. Плюс тебе. Был приятно удивлен твоей фантазией, но для меня и это слишком... Дрон, спасибо, помогло, правда непонятно, чем компилеру простой unsigned не понравился... |
| Автор: Дрон 3.3.2006, 19:11 | ||
Вероятно, для битового поля выделяется сколько байт, сколько нужно для указаного типа переменной. Любопытно было бы найти соответствующую главу в стандарте... Но это уже не ко мне. Я вообще на С++ больше не пишу |