Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.200.32.31] |
|
Сообщ.
#1
,
|
|
|
Задача: интовое число представить в двух структурах - High_Bits и LowBits. Чтобы обращение было вида Struct.high_bits.bit1.
Удалось сделать, чтобы число разбивалось в low_bits - но где-то идет логическая ошибка, и High_Bits становится равно Low_Bits. Как решить данную проблему, не деля интовое число на 2^8, чтобы разделить высокую и низкую частиэтого числа? Чтобы Struct.Value разбивалось именно на бинарные части, а не какое-либо иное их представление. |
Сообщ.
#2
,
|
|
|
Ну так прямо же:
union Test { int value; struct { char High_Bits, LowBits; }; }; Эт если int 2 байта. Добавлено Ну только наоборот: сначала идёт младшая часть, а опосля - старшая. |
Сообщ.
#3
,
|
|
|
Цитата Славян @ Сложно вспомнить, но там речь идет об unsigned long int или unsigned short int. |
Сообщ.
#4
,
|
|
|
Ну если short, то как я и написал. Только желательно и unsigned char влепить.
|
Сообщ.
#5
,
|
|
|
Цитата Славян @ Ну если short, то как я и написал. Только желательно и unsigned char влепить. Желательно использовать типы из <cstdint>. Это избавит от головняка. |
Сообщ.
#6
,
|
|
|
Не работает. Тут лучше бы пример, прям чтобы запустить можно было.
char High_Bits, LowBits; - эта штука тупо не компилится. У меня Qt. |
Сообщ.
#7
,
|
|
|
У меня в Qt всё прекрасно собирается.
//Qt Creator 3.4.2 (opensource) //Основан на Qt 5.5.0 (MSVC 2013, 32 бита) Добавлено #include <QCoreApplication> #include <QImage> #include <QDir> #include <QDebug> union Test { int value; struct { char High_Bits, LowBits; }; }; int main(int argc, char *argv[]) { Test a; a.value = 55; return a.value; } |
Сообщ.
#8
,
|
|
|
Не надо так делать.
В структуре выравнивание может быть и будут сюрпризы. Битовая арифметика чем не угодила? |
Сообщ.
#9
,
|
|
|
Цитата cppasm @ Я ей и решил. Просто структур и юнионов получилось много - чтобы дойти до бита, длинная последовательность переменных через точку получается. Некрасиво. |
Сообщ.
#10
,
|
|
|
Чего-чего?
(value >> 12) & 1 Не вижу тут ни одной точки. Со структурами могут быть сюрпризы - ещё раз говорю. |
Сообщ.
#11
,
|
|
|
А. Не так понял. Попробую это.
|
Сообщ.
#12
,
|
|
|
Если лениво думать - понаписывай инлайн функций или макросов типа get_bit_n(int value, int n) и потом просто вызывай.
Зачем этот огород с юнионами городить? |