Union | Использование в С++ | Изучение С++ для начинающих. Урок
HTML-код
- Опубликовано: 19 май 2018
- Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)
✅Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут!=)
✅ www.donationalerts.ru/r/simple...
✅ Telegram канал t.me/SergeySimpleCode
Уроки по программированию
✅Наша группа ВК smplcode
✅Подписывайтесь на канал / @simplecodeit
*Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*
Сергей спасибо вам за ваше время которое вы тратите на нас, ждем интересного приложения на с++ и не одного, для закрепления полученных знаний, вы топ.
Сделайте пожалуйста реальный бюджетненький проект на с++ в несколько уроков чтобы применить полученные знания, очень хочется практики под вашим руководством)
На С++ сделать что-то прикладное задача не простая), много времени надо потратить), возможно автор не располагает стольким временем
Сергей, спасибо за информативный урок!
Отличные уроки! Большое спасибо за то что продолжаете делать их!
Спасибо за урок Сергей.
Спасибо за урок!
Здоровенное спасибо автору!!!
#union #SimpleCode #урокипрограммирования
простите, а где может быть полезен union ?
Познавательно, спасибо
Спасибо за урок! Было бы очень здорово, что бы были домашние задания.
Спасибо за вклад науке
thanks!
Спасибо за ваш труд! Круто!
union очень здорово помогает при приеме потоковых данных, когда ты складываешь байты с шины UART например в структуру по байтно а на выходе получаешь уже готовую структуру с float, double и т.п. разве что стоит проверить MBS и LBS. Часто так делали в устройства где между платами много обмена....
А работа с битовыми структурами + union ваще огонь в МК. Там на всем экономят.
Достаточно интересная тема, за пределами основ c++. Лайк за неожиданность :)
почему неожиданность?)после классов идет struct после union)) законоерная последовательность
1 -> О чёрт прости.
2 -> Не извиняйся, мой батя учил не стеснятся экономии места с union. Особенно когда они такого размера.
1 -> Да твой батя постарался.
2 -> Они экономят больше если я их сожму.
1 -> Хммм.
2 -> Иногда, я так увлекаюсь оптимизацией, что сбиваюсь с задачи.
1 -> О, а мой батя как раз рассказывал как не сбиваться с задачи используя чьи-то фреймворки на union вместо своих.
2 -> Ты покажешь мне?
1 -> С превеликим удовольствием.
Кто понял отсылку лайк)
Сергей, огромное спасибо Вам за уроки, была бы Вам очень благодарна, если бы Вы сделали небольшой обзор наиболее популярных графических библиотек
Круто, очень внятное объяснение. Спасибо. Во всех вводных статьях вобще не освящают юнионы, говорят только что они такие же как и структуры -_-
Важное замечание
При записи (например) float в union мы используем все 4 байта памяти. Когда же мы хотим взять из этого же unium'а short int(2 байта), то мы будем кушать не первые 2 байта, а последние. Т.е., запись более маленьких переменных производится в конец выделенной памяти, а не в начало (как показано в ролике в paint'e)
автор прав. Байты хранятся в перевернутом виде.
к примеру, изначально выделилась память с мусором (в HEX-e удобней) 0d f0 ad ba
записали мы short 12 она стала 0с 00 ad ba, затронулись только 2 байта. Затем загнали мы int 40000(0x9c40) стала 40 9с 00 00 затронулись четыре байта.
Спасибо!
Спасибо)
Мега круто))Только сегодня в книге наткнулась на задачу с применением union)))И заметила ваш урок))Огромное спасибо))
Можно ссылочку на книгу? Или название
Михаил Стоун вряд ли через 2 года Вероника сможет заметить твой вопрос)
Но от хорошей книги с задачами и я бы не отказался
@@user-uj6je7uc7h А ведь ему так и не ответили
так и не ответили...
спасибо
Полезная вещь
Да уж, кажется бесполезной штукой, по крайней мере для пк и смартфонов, но объяснение очень понятное, это топчик.
Они не бесполезны. Данное свойство удобно при написании функций шифрования, при добавлении блоков текста, трансформированных в инт через юнион.
Можете пожалуйста более подробно объяснить, что вы имеете в виду, касаемо добавления блоков текста? Столкнулся с задачей обработки больших текстов (от полугигабайта) и ищу способы оптимизации, может быть union в этом деле будет очень полезным. Спасибо.
maladec
Вооу, для меня это очень похоже на роботу с регистрами из Ассемблера, интересно, познавательно👌👍
роботу...🤦♂️
@@roman_roman_roman Раманчик, если ты обращаешь внимание автора на грамматические ошибки в 2020 то
У тебя либо не закончился пубертат, либо тебе нужны пилюли в мозг
Санитар, пилюлю
@@denys2957 , какой я тебе "Раманчик", дятел? И при чем здесь пилюли и пубертат? Набор слов.
@@roman_roman_roman Раманчик, сам ты дятел)
Для тебя это набор слов, потому что ты не понимаешь их смысла
@@denys2957 , забавно, ты говоришь о словах, но не можешь написать элементарное слово "работа" без ошибок, и это в 2020, когда проверить правописание супер легко. Тут ни санитары, ни пилюли уже не помогут.
Privet spasibo za urok.s neterpeniyem jdu uroki po c#
Нет! Не надо C#! Лучше пусть автор освоит Unreal Engine и обучает нас C++ под Unreal Engine! А то на русском ничего хорошего нет вообще (да и плохого мало).
Возможно есть смысл рассказать про int32_t .... и т.д.
Не упомянули, добавлю: всегда считал union чем-то экзотическим и бесполезным. Пока мне не понадобилось вычитать float по шине i2c, чтение с которой осуществляется побайтно.
Дак вот, почему union до сих пор востребован: интерпретация одних и тех же данных, как разные типы.
Помещаем в Юнион массив из четырех uint8 и один float.
Считываем данные побайтно в элементы массива, а во float имеем полноценное число.
А если мы в 4 байта записываем значение a (2 байтное), а потом записываем значение b (2 байтное), то b запишется в область поверх значения a, или добавиться в свободное место?
Сказано же, что данные, которые были до этого стираются, то есть a сотрется, а b займет эту память. В отладчике легче всего понять это, я думаю
есть и полезные свойства юнион от совмещения, например битовое представление чисел, побайтовое и т.д. автор мог бы и раскрыть это.
а есть смысл сейчас использовать union в современном С++ или это уже пережиток прошлого и такую вещь стоит использовать только в чем-то низкоуровневом например драйвер или разработка под микроконтроллеры ?
второе
Хорошо иметь хоть малое представлении о юнион.Но в наше время можно про это ничего не знать.
ты царь
какая тема будет следующей ?????
txs
Хороший конвертер получается из типа int в тип float. И наоборот
Лучший конвертер это приведение типов :)
@@vitusink6445он немного другое имел ввиду. Если сделать приведение типов из флоат в инт, то двоичные данные тоже изменятся. А в этом случае такого не произойдёт
Комментарий
А где самое главное, как получить правильное значение переменной из Union?
Хммм, Union основан на кольцевом буфере?
Он основан на одной ячейке памяти, которую постоянно затирает, а потому актуальна только последняя переменная.
К 1:30 понял к чему ты клонишь
что то я нехрена не понял зачем это надо? одну переменную записали поверх другой, перетерли, записали следующую, и как нам вытащить теперь первую переменную?
Очень удобно для обмена данными через порты ввода/вывода. Пакет для обмена может состоять из любых типов данных, а в порт отправляется/принимаются байты.
У меня все равно вопрос, извините за мой французкий, нах...я? Я вот читаю книги по более углубленным темам программирования и вот часто натыкаюсь на юнионы в коде, со структурами понятно, они как бы примитив классов и в низкоуровневом программирований они необходимы. Но вот с юнионами я никак не могу понять их назначения. Зачем объединять разные поля в один юнион, смысл?
Объединения (union) также позволяют определить свой тип данных и также хранят набор элементов, но в отличие от структуры все элементы объединения имеют нулевое смещение. А это значит, что разные элементы занимают в памяти один и тот же участок, то есть в памяти они накладываются друг на друга.
Например, создашь ты 4 переменных
int a;
int b;
double c;
double d;
в общем выделится 24 байта, даже если не используешь эти переменные.
Если же записать в Union
union numeric
{
int a;
int b;
double c;
double d;
};
Хоть всё можно будет использовать только попеременно, но зато это объединение займёт 8 байт вместо 24
Выглядит как неплохая экономия для каких-нибудь микрочиповых устройств, чтобы писать что-нибудь нормальное для них, укладываясь а их лимиты.
P.S. Но думаю смысла записывать одинаковые типы данных по несколько раз не то что бы много, если только чтобы у них были разные имена для визуального удобства.
Короче говоря, практически бесполезная хрень в современных реалиях
Несомненно. Компромисс это всегда некое извращение.
Спасибо за урок!
спасибо