![]() |
|
Модераторы: bsa |
![]()
|
|
| Metalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 635 Регистрация: 22.10.2008 Где: Украина-ZPсity Репутация: нет Всего: нет |
Почитал про struct, union и битовые поля в нескольких учебниках, но не совсем понял различия между ними. Обьясните, пожалуйста.
-------------------- Don't let the system get you down. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
структура и юнион это наборы полей. поле это элемент для хранения данных. битовое поле это элемент, который будет использовать указанное кол-во бит. В структуре каждому элементу отведено свой очередной адрес и поля не пересекаются а в юнионе одно и тот же и поля получаются наложенными друг для друга.. (юнионом сильно не забивайте голову, он редко нужен, и в основном только для хаков ) Ну а если Вы ищете разницу между структурой и битовым полем Лучше перечитать книжки еще (может и не один) раз, до понимания, потому что основы лучше чем в книжке, вряд ли кто объяснит. потому как вряд ли кому охота тратить время на то, что уже неоднократно разжевано.. |
|||
|
||||
| Metalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 635 Регистрация: 22.10.2008 Где: Украина-ZPсity Репутация: нет Всего: нет |
mes, это понятно, что спрашивать легче, чем отвечать, но тем не менее зачем определять память под каждое поле, если оно выделяется автоматически? (это я о битовых полях)
-------------------- Don't let the system get you down. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Metalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 635 Регистрация: 22.10.2008 Где: Украина-ZPсity Репутация: нет Всего: нет |
mes, эт чтоб я написал пример ?
-------------------- Don't let the system get you down. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ага пример того, что Вы подразумеваете под вышеприведенной цитатой. и чего Вы удивляетесь ? хотите получить ответ: донесите вопрос так, чтоб было понятно. не знаю как другим, но мне например абсолютно не понятно, что Вы имели ввиду. |
|||
|
||||
| ARMALITE |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 22.12.2009 Где: Санкт-Петербург, Россия Репутация: нет Всего: нет |
насколько я помню, битовое поле- это всего-лишь некая переменная определенного размера (явно заданного вами: размер может быть целым числом от 0 до какого-то максимального размера, зависит от реализации). именованные битовые поля инициализируются как обычные переменные. И значения им можно присвоить любые, какие только могут в них влезть (надо только помнить что в некоторых реализациях знак числа занимает 1 бит)
если вы изучаете язык для себя, то не забивайте себе этим особо голову |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 4 Всего: 64 |
Эм... 1 байт же будет -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
artsb, 1+1+1+29 = 32. Или у меня с арифметикой плохо?
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 4 Всего: 64 |
Ох, ё! Действительно. Что-то я много о чём одновременно думаю. Забыл что я не многозадачный. Это сообщение отредактировал(а) artsb - 10.1.2010, 18:19 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| BrAgOl |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 6.3.2005 Где: М.О. Репутация: нет Всего: нет |
Не хочу плодить темы поэтому пишу свой опрос сюда.
Программирую под МК 51 на Си в флэш память нужно записывать 2-ух байтный коэффициент, а флэш память у МК51 это массивы в каждом по 4 байта (EDATA1, EDATA2, ..., EDATA4) по байту каждый соответственно, я и решил 2-ух байтное число записывать в EDATA1, EDATA2 можно с помощью объединения, но почему-то не все так гладко вышло
почему так можно делать, на выходе 555, 0х02 и 0х2В, а вот так нельзя:
чтоб соответственно на выходе в i было 555? Это сообщение отредактировал(а) BrAgOl - 20.12.2011, 15:49 |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
BrAgOl, почему нельзя? компилятор ругается? если так, то есть подозрение, что он не полностью соответствует языку С. Что за компилятор?
|
|||
|
||||
| BrAgOl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 6.3.2005 Где: М.О. Репутация: нет Всего: нет |
Да с компиляцией все в порядке GNU GCC, просто я предполагал, что при
un.c[0] = 0x02; un.c[1] = 0x2B; в переменной i должно быть значение 555 (22В в hex'e) а там видимо случайное число, записанное по этому адресу, что-то типа 2147298050 ЗЫ под МК естественно не им компилю, просто кусок кода проверить хотел в code::blocks Это сообщение отредактировал(а) BrAgOl - 20.12.2011, 16:20 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
а sizeof(int) чему равно на этой платформе?
попробуй сначала присвоить i нуль, а уже потом присваивать c[x]. Это сообщение отредактировал(а) bsa - 20.12.2011, 16:23 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |