Форум программистов, компьютерный форум 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() { подробнее

Показать сообщение отдельно
modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
21.06.2012, 11:51     Маска байта
Тарас, программа должна выглядеть примерно так. Могут быть ошибки, примеров маловато...
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <assert.h>
 
typedef unsigned __int8 uint8_t;
typedef unsigned __int32 uint32_t;
 
bool FixMask(uint32_t Mask, uint8_t BitPerixel, uint8_t* shift, uint8_t* cut)
{
    const uint8_t MaxByte = 0xFF;
    const uint8_t MaxBpp = 32;
    const uint8_t MaxRed = 8;
 
    uint8_t i = 0;
    while (!(Mask & 1) && (i<MaxBpp))
    {
        i++;
        Mask >>= 1;
    }
    uint8_t from = i;
 
    while ((Mask & 1) && (i<MaxBpp))
    {
        i++;
        Mask >>= 1;
    }
    uint8_t to = i;
 
    while (i<MaxBpp)
    {
        i++;
        Mask >>= 1;
        if (Mask & 1) return false;
    }
 
    if (to > BitPerixel) return false;
    if (to - from > MaxRed) from = to - MaxRed;
 
    *shift=from;
    *cut=to - from;
    return true;
}
 
uint8_t GetRed(uint32_t col, uint8_t shift, uint8_t cut)
{
    const uint8_t MaxBpp = 32;
    const uint8_t MaxRed = 8;
    col <<= (MaxBpp - shift -cut);
    col >>= (MaxBpp - cut);
 
    // col <<= (MaxRed - cut);
 
    if (!(col&1))
    {
        col <<= (MaxRed - cut);
    }
    else
    {
        col <<= (MaxRed - cut);
        col |= (0xFF >> cut);
    }
    return (uint8_t)col;
}
 
uint32_t GetCol(void* p, uint8_t BitPerixel)
{
    assert(BitPerixel % 8 == 0);
 
    uint32_t col = 0;
    uint8_t* src=(uint8_t*)p;
    uint8_t* dst=(uint8_t*)&col;
 
    
    while (BitPerixel)
    {
        *dst = *src;
        dst++;
        src++;
        BitPerixel -= 8;
    }
    return col;
}
 
int main()
{
    uint32_t col;
    uint32_t mask;
    uint8_t  bpp;
 
    bool r;
    uint8_t shift;
    uint8_t cut;
    uint8_t red;
 
    col = 0x5EF55ED3;
    bpp = 32;
 
    assert(GetCol(&col,8)==0xD3);
    assert(GetCol(&col,16)==0x5ED3);
    assert(GetCol(&col,32)==0x5EF55ED3);
 
    mask = 0x07C00000;
    r = FixMask(mask,bpp,&shift,&cut);
    assert(r == true);
    red=GetRed(col,shift,cut);
    //assert(red == 0xD8);
    assert(red == 0xDF);
 
    mask = 0x00FF0000;
    r = FixMask(mask,bpp,&shift,&cut);
    assert(r == true);
    red=GetRed(col,shift,cut);
    assert(red == 0xF5);
 
    mask = 0xFFC00000;
    r = FixMask(mask,bpp,&shift,&cut);
    assert(r == true);
    red=GetRed(col,shift,cut);
    assert(red == 0x5E);
 
    mask = 0x07C00001;
    r = FixMask(mask,bpp,&shift,&cut);
    assert(r == false);
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru