Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89

Битовые поля

28.02.2010, 00:05. Показов 3973. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, как мне сохранить две цифры с помощью битовых полей?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2010, 00:05
Ответы с готовыми решениями:

Битовые операции, битовые поля.
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в виде битовых операций. Записать в unsigned int. Использовать...

Битовые поля. Поля без типа и имени
Вчера сделал очень интересную и болезненную ошибку (с точки зрения времени, так как искал я ее долго)... представьте структуру (битовое...

битовые поля!!
добрый вечер! имеется класс представления битовых полей: #ifndef HTBITFIELDS #define HTBITFIELDS #include <iostream> ...

13
 Аватар для Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
28.02.2010, 02:54
Немного непонятен вопрос, куда тебе что нужно сохранить? или имеешь в виду с помощью битовых полей установить две цифры, всмысле как два флага ( 1 или 0), поконкретней напиши.
0
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
28.02.2010, 11:56  [ТС]
Я не совсем понимаю логику битовых полей, но в моём представлении они имеют такой вид:
берём число, например, 100, и разбиваем его на "битовые поля (в данном случаи на две части)" -->
--> 100(10)==00110100(2).
--> 0011(2)==3(10)
--> 0100(2)==4(10)

Вот эти 3 и 4 мне и нужно сначала сохранить в двоичное число, а потом его разбить и вывести эти две цифры. Но моя логика, где-то глубоко внутри меня, говорит, что битовые поля имеют совсем другое представление… **
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
28.02.2010, 12:30
битовое поле - это когда в переменной типа unsigned int резервируется какое-то число битов
обычно ему даётся имя
в результате переменная используется не вся, а лишь частично

C
1
2
3
4
5
6
7
8
9
10
11
struct bits {
    unsigned int one : 4;
    unsigned int two : 4;
};
 
...
 
    struct bits fields;
 
    fields.one = 3;
    fields.two = 4;
мы берём четыре бита потому что сохраняем одну цифру до десяти
размер этой структуры будет равен размеру sizeof(unsigned int) потому что эти поля зарезервированы в одной переменной
1
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
28.02.2010, 12:43  [ТС]
Я правильно понимаю... Получается, если бы это всё происходило без битовых полей, с использование структуры, то я бы резервировал для переменной fields 4 байта (ибо sizeof(unsigned int)=2, а поля у структуры два. Итого => 4 байта). Но, если я использую битовые поля, эта переменная занимает только 2 байта. Верно?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
28.02.2010, 13:14
если используются битовые поля, они резервируются в одной переменной
поэтому размер структуры будет равен размеру структуры для одной переменной типа unsigned int

C
1
2
3
4
struct {
    unsigned int a : 4;
    unsigned int b : 4;
} s1;
C
1
2
3
struct {
    unsigned int n;
} s2;
sizeof s1 == sizeof s2
1
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
28.02.2010, 20:29  [ТС]
accept, большое спасибо за объяснения.)

Добавлено через 35 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> 
#include <cstring> 
using namespace std; 
 
 
struct 
{ 
    unsigned int one: 4; 
    unsigned int two: 4;
} bcd; 
 
int main() 
{ 
    сin>>bcd.one>>bcd.two;
    cout<<"\n\nResult\n";
    cout<<"\nOne: "<<bcd.one; 
    cout<<"\nTwo: "<<bcd.two;
    cout<<'\n';
   return 0; 
}
Подскажите, пожалуйста, почему не работает..?

Добавлено через 2 часа 49 минут
Подскажите, пожалуйста, что не так в это коде! Очень срочно нужно...

Добавлено через 2 часа 51 минуту
... ... ...
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
28.02.2010, 22:00
Видно не умеет считывать cin в такие переменные....
Вот так работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream> 
using namespace std; 
 
struct 
{ 
    unsigned int one: 4; 
        unsigned int two: 4;
} bcd; 
 
int main() 
{ 
    unsigned int a;
        cin >> a;
        bcd.one = a;
        cin >> a;
        bcd.two = a;
 
        cout<<"\n\nResult\n";
        cout<<"\nOne: "<<bcd.one; 
        cout<<"\nTwo: "<<bcd.two;
        cout<<'\n';
   return 0; 
}
2
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
01.03.2010, 22:52  [ТС]
insideone, спасибо огромное.))

Добавлено через 21 час 52 минуты
Еще вопрос. Подскажите, пожалуйста, можно ли создать массив, а не переменную, этой структуры? И будет ли она эффективно работать? Просто когда я делаю массив, то у меня первый раз поля заполняются нормально, а вот второй прерывается ошибкой... Не пойму в чём проблема... Подскажите, молю...
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
01.03.2010, 23:57
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
#include <iostream> 
using namespace std; 
 
struct 
{ 
    unsigned int one: 16; // половинка unsigned int это 16
    unsigned int two: 16;
} bcd[10]; 
 
int main() 
{ 
        for (unsigned int i = 0; i < 10; i++)
        {
            bcd[i].one = i; bcd[i].two = i * 2;
        }
 
        for (unsigned int i = 0; i < 10; i++)
        {
            cout
                << "[" << i << "] One: " << bcd[i].one
                << "; Two: " << bcd[i].two << ";" << endl;
        }
return 0; 
}
Вот кажется и массивчик сработал. Нужно обратить внимание что в unsigned int 4 байта а значит 4 * 8 бит...
0
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
02.03.2010, 00:03  [ТС]
Спасисбо.)) Сейчас буду пробовать использовать.))
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
02.03.2010, 00:09
Sasuke, Простите, может я чего не понял
100(10)==00110100(2).
Но ИМХО, 100(10) = 0110 0100(2) = 64(16)
Хмм. Любопытно. 100(8) = 64(10). Может тут есть какой закон ?
0
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
02.03.2010, 00:19  [ТС]
Цитата Сообщение от Day Посмотреть сообщение
Sasuke, Простите, может я чего не понял
Но ИМХО, 100(10) = 0110 0100(2) = 64(16)
Прошу прощение за неверный перевод.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
02.03.2010, 03:14
Цитата Сообщение от insideone
C++
1
unsigned int one: 16; // половинка unsigned int это 16
у него int двухбайтовый

Цитата Сообщение от Sasuke
ибо sizeof(unsigned int)=2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.03.2010, 03:14
Помогаю со студенческими работами здесь

Битовые поля
Ребят, подкиньте, пожалуйста, инфу по битовым полям или ссылочку на ресурс. Может у кого-нить лекции в электронном варианте есть или...

Битовые поля
Здравствуйте. Возникла необходимость работы с битовыми полями. Однако не могу понять, почему в нижеприведенном примере биты...

Битовые поля
Добрый вечер! Помогите, пожалуйста, найти ошибку в программе. Компиляцию проходит безошибочно, но данных не выдает при запуске. ...

Битовые поля
В приложении 1 есть пример использования битовых полей. В выделенной строке структуре присваивается бит, полученный из функции. (Кстати,...

Битовые поля
Доброго времени суток. Читаю книгу &quot;Освой самостоятельно С++ за 21 день&quot;, наткнулся на битовые поля. Читаю про их объявление: &quot;Они...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru