Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235

Unsigned integer 24 bit

12.08.2011, 04:24. Показов 4816. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно объявить беззнаковый integer размером в 24 бита?

Если я объявлю его как битовое поле в структуре, например так:

C++
1
2
3
4
5
6
struct rgb
{
    unsigned r:24;
    unsigned g:24;
    unsigned b:24;
};
Над ним можно будет производить арифметические операции как с обычным int'ом?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.08.2011, 04:24
Ответы с готовыми решениями:

Comparison between signed and unsigned integer expressions
Много вот таких варнингов: Comparison between signed and unsigned integer expressions FreeBSD 10 gcc 4.8 Ввожу:gmake libthecore...

Ошибка "comparison between signed and unsigned integer expressions"
программа выдаёт ошибку - varning: comparison between signed and unsigned integer expressions Ребята могли бы подсказать в чем проблема?...

Что означает предупреждение " comparison between signed and unsigned integer expressions"
Я написал вот такую строчку: for(int i=0; i < stringas.size();i++){ cout << " << "] "; } cout << endl; И мне пишет:...

8
Заблокирован
12.08.2011, 04:29
Цитата Сообщение от Damaks Посмотреть сообщение
Как объявить беззнаковый integer размером в 24 бита?

Добавлено через 14 минут
Если я объявлю его как битовое поле в структуре, например так:

struct rgb
{
unsigned r:24;
unsigned g:24;
unsigned b:24;
};

с ним можно будет делать арифметические операции как с обычным int'ом?
Вы можете объявлять только те типы данных, которые предоставляет компилятор. Так что если компилятор не предоставляет такого типа, как беззнаковое размером 24 бита, то вы ничего сделать не сможете.

Что касается битовых полей, которые вы объявили в структуре, то с ними можно работать как с целыми числами, потому что в выражениях они преобразуются к целому числу типа unsigned int.
0
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
12.08.2011, 19:06  [ТС]
А какова будет потеря производительности? В википедии написано:
Обращение к битовым полям требует дополнительных команд процессора для маскирования и сдвига, и потому медленнее обращений к словам/байтам. Поэтому битовые поля применяются для максимально полной упаковки информации в местах, где неважна скорость доступа к информации.
Но вроде как 24 бита - это ровно 3 байта, т.е. сдвигать вроде как ничего и не надо?
0
Заблокирован
12.08.2011, 19:50
Цитата Сообщение от Damaks Посмотреть сообщение
А какова будет потеря производительности? В википедии написано:

Но вроде как 24 бита - это ровно 3 байта, т.е. сдвигать вроде как ничего и не надо?
Дело в том, что следующее битовове поле хранит часть своих битов в оставшемся четвертом байте. То есть битовые поля непрерывны. Если вы хотите разбить их по единицам хранения, то встаьвте между ними битовое поле размером 0, и тогда следующее битовое поле будет помещаться в отдельную единицу хранения, то есть в отдельное unsigned int.
Например,

struct rgb
{
unsigned r:24;
unsigned:0;
unsigned g:24;
unsigned:0;
unsigned b:24;
};

Только я не уверен, что алгоритм выделения битов у компилятора изменится. Надо смотреть результирующий ассемблерский код.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
12.08.2011, 20:02
Это на каждый канал по 24 бита получается? Круто! Бывает, конечно, и такое, но не часто. В 24-битной картинке по 8 бит на канал, то есть в unsigned int ещё и для альфа-канала 8 бит останется...
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
12.08.2011, 20:47
Цитата Сообщение от easybudda Посмотреть сообщение
Это на каждый канал по 24 бита получается? Круто! Бывает, конечно, и такое, но не часто.
А я вот, кстати, тоже хотел спросить, но забыл. Где такое чудо бывает, как эти 24 бита получают и как их потом используют. На канал, разумеется
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
12.08.2011, 22:06
Цитата Сообщение от grizlik78 Посмотреть сообщение
А я вот, кстати, тоже хотел спросить, но забыл
При сканировании слайдов для увеличения глубины цвета на канал, бывает, 16 бит используют (на обычном сканере тыщи за две рублей такое конечно не исполнишь), про то, что может быть и 24, в книжках только читал, сам никогда не встречал. Но потом всё равно к 8 битам на канал сводят, в CMYK как-раз 32 получается...
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
13.08.2011, 11:09
> Текущие возможности GEGL:
> 8-/16-/32-разрядные (с плавающей точкой) режимы, внутренняя обработка — в 128-разрядном режиме;

0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
13.08.2011, 11:20
Цитата Сообщение от Damaks Посмотреть сообщение
А какова будет потеря производительности?
Расскажите про new и delete в C++
Хотя для поля размером 24 бит запись будет немного более оптимальной - теоретически это можно сделать за три операции (два store'а и один сдвиг), а чтение - за 4 операции (два load'а, свдиг и or). При этом запись такого поля будет без чтения подолжки (потому что поле находится ровно по границам байтов), что само по себе уже быстрее, чем для произвольного поля. Но это зависит от того, насколько качественно компилятор работает с битовыми полями
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.08.2011, 11:20
Помогаю со студенческими работами здесь

Unary minus operator applied to unsigned type, result still unsigned
Подскажите, имеем следующий код: signed int a = -0x80000000; signed int b = -1; signed int c = (a / b);

Преобразование unsigned short в unsigned char
Как можно преобразовать unsigned short в unsigned char ?

Преобразовать unsigned char в integer
Извиняюсь за глупый вопрос, но всё из башки вылетело. Напомните как преобразовать unsigned char в integer. Я считываю данные в буфер...

Warning: comparison between signed and unsigned integer expressions
namespace read { template <typename T> T read(QByteArray &array, uint &offset) { byteValue<T> v; for...

Нельзя преобразовать тип function(a: integer;b: integer):integer к real
unit matr1; interface type matr2=array of real; matr3=array of real; procedure sum (A:matr3;var B:matr2; n:integer); ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru