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

Булевые операции - C++

Восстановить пароль Регистрация
 
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
27.08.2013, 13:55     Булевые операции #1
Есть байт, состоящий из 8 бит. типа unsigned char
биты 0-2 одно значение(может быть значение от 1 до 8)
биты 3-5 второе(от 1 до 8)
биты 6-8 третье(от 1-3).
Как это байт конвектировать в 3 переменных int? тоесть надо извлечь отдельно каждое значение..Спасибо заранее
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2013, 13:55     Булевые операции
Посмотрите здесь:

C++ Битовые операции
Битовые операции C++
C++ Операции в С++
C++ Битовые операции
C++ Побитовые операции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ВСарости
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 10
27.08.2013, 14:11     Булевые операции #2
Через Union, к примеру.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
union {
    unsigned char val;
    struct{
        unsigned first:3;
        unsigned second:3;
        unsigned third:2;
    };
} some;
 
some.val = value;
 
int first = some.first;
int second = some.second;
int third = some.third;
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
27.08.2013, 14:14     Булевые операции #3
Битовые поля + union.
Можно битовыми операциями, но битовые поля предпочтительнее.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdint>
struct BitMap {
    int8_t a:3;
    int8_t b:3;
    int8_t c:2;
};
 
union Mapper {
    uint8_t value;
    BitMap bits;
};
 
Mapper m = { 0x7f }; // 0111 1111
// m.bits.a == 0b011
// m.bits.b == 0b111
// m.bits.c == 0b11
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
27.08.2013, 14:16     Булевые операции #4
Цитата Сообщение от linkoln78 Посмотреть сообщение
биты 0-2 одно значение(может быть значение от 1 до 8)
8 не поместится в три бита. максимум семь. от 0 до 7
Yandex
Объявления
27.08.2013, 14:16     Булевые операции
Ответ Создать тему
Опции темы

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