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

Маска байта - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить минимальный среди элементов побочной диагонали матрицы http://www.cyberforum.ru/cpp-beginners/thread609997.html
помогите пожалуйста написать программу Дана целочисленная квадратная матрица. Определить минимальный среди элементов побочной диагонали. Для ввода, вывода и обработки матрицы использовать функции.
C++ Помоги разобравться с нескольками прогами Объясните, какие действия выполняет каждая строка в 6 программах. №1. .... int add(int n, int m) {return n + m;} int divi(int n, int m) {return n / m;} int mult(int n, int m) {return n * m;} int subt(int n, int m) {return n - m;} void main() { http://www.cyberforum.ru/cpp-beginners/thread609991.html
Работа с файлами C++
Напишите пожалуйста программу ( с комментариями по возможности ) Информация об участниках спортивных соревнований содержит: - Ф.И.О. игрока; - игровой номер; - возраст; - рост; - вес; Вывести информацию о самой молодой, рослой и легкой команде.
C++ Определить среднюю массу мальчиков и средний рост девочек
Напишите пожалуйста программу(с комментариями по возможности): "По данным сведениям об учениках класса определить среднюю массу мальчиков и средний рост девочек. Кто из учеников класса самый высокий?"
C++ Попадает ли точка с заданными координатами в полукруг http://www.cyberforum.ru/cpp-beginners/thread609977.html
Определить, попадает ли точка с заданными координатами в полукруг радиусом R, расположенный в I и II четверти. (Уравнение окружности R2=x2+y2.).
C++ operator= Такой вопрос. Есть объект. Хочу чтобы при присваивании его к чеслу выдавалось число. Например. class MyClass { short MyClass::operator=(const MyClass&My) {return 12;}; }; Main() { подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.06.2012, 13:06  [ТС]     Маска байта
Я вообще первый раз столкнулся с длинными битовыми полями неизвестных в десигнотайме длины и положения. Но вроде сделал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//=================================================================================================
bool                       ChaeckMask           (DWORD                  Mask       ,
                                                 uint8_t               &Start      ,
                                                 uint8_t               &End        )
{
 uint32_t LastBit;
 uint32_t FirstBit;
 uint32_t Bit;
 Start=0xFFFFFFFF;
 End  =0xFFFFFFFF;
 for (FirstBit=31; FirstBit<32; --FirstBit)
 {
  if ((Mask&(1<<FirstBit))!=0x00000000)
  {
   Start=FirstBit;
   break;
  }
 }
 if (Start==0xFFFFFFFF)
 {
  return true;
 }
 for (LastBit=0; LastBit<=FirstBit; ++LastBit)
 {
  if ((Mask&(1<<LastBit))!=0x00000000)
  {
   End=LastBit;
   break;
  }
 }
 if (FirstBit==LastBit)
 {
  return true;
 }
 for (Bit=LastBit+1; Bit<FirstBit; ++Bit)
 {
  if ((Mask&(1<<Bit))==0x00000000)
  {
   return false;
  }
 }
 return true;
}
//=================================================================================================
uint32_t                   CopyFilePixel        (uint8_t               *Pixel      ,
                                                 WORD                   BitPerPixel)
{
 uint8_t  *p1;
 uint8_t  *p2;
 uint32_t  Result;
 uint8_t   BytePerPixel;
 BytePerPixel=BitPerPixel/8;
 for (p1=((uint8_t *)&Result)+BytePerPixel-1, p2=Pixel+BytePerPixel-1; p2>=Pixel; --p1, --p2)
 {
  *p1=*p2;
 }
}
//=================================================================================================
uint8_t                    CopyColor            (uint32_t               Buffer     ,
                                                 DWORD                  Mask       ,
                                                 uint8_t                Start      ,
                                                 uint8_t                End        )
{
 static uint8_t TestMasks      [8]= {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
 static uint8_t CorrectMasks[2][8]={{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
                                    {0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F}};
        bool    TestResult;
        uint8_t Shift;
 if (Start==0xFFFFFFFF)
 {
  return 0x00;
 }
 Buffer&=Mask;
 Shift=Start-7;
 if (Shift>0)
 {
  Buffer>>=Shift;
 }
 if (Start<0)
 {
  Buffer<<=-Shift;
 }
 if (End>Shift)
 {
  End-=Shift;
  TestResult=(Buffer&TestMasks[End])!=0x00;
  Buffer|=CorrectMasks[TestResult][End];
 }
 return (uint8_t)Buffer;
}
//=================================================================================================
. Прошу критику.

Добавлено через 1 минуту
Раньше у меня все форматы были фиксированные.
 
Текущее время: 23:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru