Форум программистов, компьютерный форум, киберфорум
Наши страницы

Битовые поля - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двумерный массив. Перемещение строк местами. http://www.cyberforum.ru/cpp-beginners/thread187627.html
Помогите разобраться пожалуйста, что не так? Задание выглядит так Составить программу, которая получает матрицу В размером m *n и два числа i<m и j<m. Если матрица в каждой четной строке имеет...
C++ Помогите пожалоста как найти два максимальних елемента в массиве с помощью асемблеровских вставок!!!!!! http://www.cyberforum.ru/cpp-beginners/thread187625.html
C++ Определение максимального из трёх целых чисел
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию Вот такая ошибка вылазяет при компиляции в VS 2010 пример списан из книжки Почему...
ввести массив C++
здравствуйте! Чтото я совсем запутался) Это очень глупо, но помогите мне плиз ввести двумерный динамический массив с N(задаёт пользователь) размерностью.
C++ Ввести двумерный массив целых чисел размерностью 2 на 4. Заменить все четные элементы на 0 http://www.cyberforum.ru/cpp-beginners/thread187606.html
Ввести двумерный массив целых чисел размерностью 2 на 4. Заменить все четные элементы числом 0. Буду благодарен за помощь и поддержку.
C++ Как можно упростить программу?(или подкорректировать) (ссылка на задание) Вот мое решение : Код: #include <stdio.h> #include <conio.h> #include <iostream.h> #include <iomanip.h> подробнее

Показать сообщение отдельно
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
07.11.2010, 19:45
Ну, есть два варианта, первый с битовыми полями (как я понимаю тебе он нужен):
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
#include <stdio.h>
 
typedef unsigned char uchar;
 
typedef union
{
    uchar value;
 
    struct
    {
        uchar b1 : 1;
        uchar b2 : 1;
        uchar b3 : 1;
        uchar b4 : 1;
        uchar b5 : 1;
        uchar b6 : 1;
        uchar b7 : 1;
        uchar b8 : 1;
    };
} Byte;
 
int main()
{
    Byte byte;
 
    byte.value = 0x00;
    printf("byte = 0x%02X\n", byte.value);
 
    byte.b3 = 1;
    printf("byte = 0x%02X\n", byte.value);
 
    byte.b7 = !byte.b7;
    printf("byte = 0x%02X\n", byte.value);
 
    byte.b7 = !byte.b7;
    printf("byte = 0x%02X\n", byte.value);
 
    return 0;
}
И второй более оптимальный вариант:
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
#include <stdio.h>
 
#define BIT1 0x01
#define BIT2 0x02
#define BIT3 0x04
#define BIT4 0x08
#define BIT5 0x10
#define BIT6 0x20
#define BIT7 0x40
#define BIT8 0x80
 
typedef unsigned char byte;
 
int main()
{
    byte value = 0x00;
    printf("byte = 0x%02X\n", value);
 
    value |= BIT3;
    printf("byte = 0x%02X\n", value);
 
    value ^= BIT7;
    printf("byte = 0x%02X\n", value);
 
    value ^= BIT7;
    printf("byte = 0x%02X\n", value);
 
    return 0;
}
Добавлено через 4 минуты
Кстати, насчет битовых полей, вспомнил одну штуку - в MSVC битовые поля для разных типов данных не сжимаются, в отличии от gcc, поэтому если хочешь чтобы несколько подряд идущих битовых полей занимали непрерывный участок памяти - лучше всегда использовать один тип данных, как в первом примере выше.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru