Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [C++] union  (Прочитано 11046 раз)
0 Пользователей и 1 Гость смотрят эту тему.
The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« : 19-12-2009 10:05 » 

Привет)
Для меня возможность использовать объединения - высший пилотаж. Как можно научиться этому? Улыбаюсь
Скорее всего, я не до конца понимаю - как можно получить полезные данные из одного и того же набора единиц и нулей, если только интерпретировать их как разные типы?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 19-12-2009 10:10 » 

The Nameless One, А можно поподробнее и в примерах, что ты именно не понимаеш?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 19-12-2009 10:15 » 

Та легко.

есть ячейка памяти
в ней лежит, например 0х60

В ней будет лежать 0х60 все время.

Но в некоторых случаях тебе эта ячейка нужна как символ, а в некоторых как число.
Можно применить функции преобразования.
Но ведь можно и применить union - нужен символ, то обращаешься как к символу, нужно число - обращаешься как к числу.



Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 19-12-2009 10:28 » 

Sla, просто не понятно, как поступают в более сложных случаях - когда объединяют целые структуры? Это получается, нужно заранее на самом низком уровне просчитать, чтобы эти структуры всегда выдавали осмысленный набор данных:)

Finch,
Ну, например, имеет ли смысл это:
Код:
union
{
   int     i;
   bool  b;
};
Это объединение будет занимать 32 бита в памяти - если в i число 12 - то как будет интерпретироваться b?, к примеру?


Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 19-12-2009 10:35 » 

Тип bool всегда интерпретируется как true если значение отлично от нуля. Если значение 0 то это всегда false. Поэтому всегда рекомендуют проверять на false, а не на true. У этого правила есть небольшое исключение. Программа возврашает 0, если она выполнилась успешно. Иначе, возврашается код ошибки выполнения.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 19-12-2009 10:37 » 

Finch, ясно:)
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 19-12-2009 11:22 » 

The Nameless One, ты привел замечательный пример.
i занимает 32 разряда
b занимает 16 разрядов

Нужно узнать есть ли единицы в младших 16 раpрядах i.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines