Форум программистов, компьютерный форум CyberForum.ru

Union - Объединения - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Погрешность вычисления(ряд Тейлора) http://www.cyberforum.ru/cpp-beginners/thread655686.html
написал программку вычисления функции exp(x) разложением в ряд Тейлора с заданной точностью. Программа должна суммировать члены ряда до тех пор, пока модуль очередного члена ряда не станет меньше точности. только чего-то я сделал не так и получился какой-то ужас (опыт в С++ 2 недели ). При x>4 начинает нести бред. Для отрицательных значений не делал еще. Ну там просто. Короче вот код: #include...
C++ Написать конвертер, переводящий л.с. в ньютон на метр переводящий л.с в ньютон на метр http://www.cyberforum.ru/cpp-beginners/thread655679.html
Сортировка методом центрированных вставок C++
Доброго времени суток. Помоги доделать программу. Я решил сделать эту сортировку через массивы(возможно зря)). И теперь, допусти если у нас элемент их исходного массива imas больше чем последний из второго массива vmas, то сдвинуть все элементы второго массивы на 1 назад, освободив место для нового элемента. + Нужно еще чтобы элемент сравнивался не только со средним элементом vmas, но и если...
C++ Масштабирование числовой прямой
Незнаю куда запостить такой вопрос, поэтому в случае чего перенесите Имеется шкала(допустим от 0 до 88) как ее перевести в другую (допустим от нуля до 12) и как перевести шкалу от n до m к шкале от 0 до 1
C++ не могу понять что с выводом http://www.cyberforum.ru/cpp-beginners/thread655619.html
помогите найти косяк,у меня при отрицательном "a" он выдаёт результат и "error" хотя должен только "error" таже проблема если b=0 a>0 #include <stdafx.h> #include <iostream> using namespace std; int main() { double a,b; cout<<"VVedite a and b";
C++ Динамический двумерный массив: найти наибольший из нименьших элементов строк здравствуйте! пишу первый раз, не знаю точно, к С или С++ относится вопрос (п.ч. там нет объектов), я учусь на 2 курсе, нам задали написать программу, в которой можно вводить двумерный массив, меню из 4 пунктов, в пункте "обработка" программа находит наименьший эл-т в каждой строке, затем находит среди них наибольший и выводит на экран его, номер его строки и столбца. я заметил, что если вводить... подробнее

Показать сообщение отдельно
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
21.09.2012, 21:54     Union - Объединения
Infinity3000,
посмотрел я на твою ссылку и пригорюнился
одна эта фраза
Как вы узнаете, объединения очень похожи на структуры,


Elfenlide,
попытаюсь объяснить своими словами
Объединения используют когда одни и те же данные нужно выразить разным способом
например(куски реальной программы для работы с контроллера с USB)
хост посылает контроллеру данные упакованные вот в такую структуру
C++
1
2
3
4
5
6
7
typedef struct{ 
  byte bmRequestType;//0
  byte bRequest;     //1
  word wValue;       //2-3
  word wIndex;       //4-5
  word wLength;      //6-7
} SETUP_PACKET;
иногда нужно значение первых 2 элементов вместе
их удобно объединить
C++
1
word         wRequest;
но хост посылает последовательно 8 байт и как их вписать в слово word wValue;?
и тут приходит на помощь объединение

C++
1
2
3
4
5
6
typedef union
{
  SETUP_PACKET setup;
  byte         b[8];
  word         wRequest;
} UsbSetupPacket;
т.е одни и те же данные можно представить
массив из 8 байтов
структуру SETUP_PACKET
и слово wRequest(используются два первых байта)

и работаем
C++
1
UsbSetupPacket SetupPacket;
при получении данных нам удобней работать с массивом
C++
1
2
  for (i=0; i<8; i++)
   SetupPacket.b[i]= Usb_read_byte();
при анализе пакета с wRequest;
C++
1
2
3
  switch (SetupPacket.wRequest)  
  {
    case GET_STATUS_DEVICE:
а для обработки со структурой

C++
1
2
3
 if (SetupPacket.setup.wValue ==0x00  )     //  FEATURE_ENDPOINT_HALT
      {
       wIndex = (SetupPacket.setup.wIndex & 0x7F );
так же можешь разложить int на массив char
C++
1
2
3
4
5
union
  {
   ArrChar char[4];
   Value int; 
  }
в зависимости от элемента будешь работать или с массивом байт или с числом
 
Текущее время: 19:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru