битовая карта в С++ – справится ли unsigned int с этой задачей?
-
12-11-2019 - |
Вопрос
Боюсь признаться, я уже некоторое время не использовал C++, но боюсь, что мне придется сейчас, и я немного заржавел.
Мне нужно растровое изображение, и меня волнует производительность: размер моего растрового изображения не будет превышать 25 бит.
Я думал об использовании unsigned int, но, боюсь, не помню, как это реализовано в c/c++.
Является ли unsigned int реализованным как обычное двоичное число?
Я также открыт для любых других предложений по растровому изображению.
Заранее спасибо за помощь!
Решение
Используйте std::bitset<25>
из заголовка <bitset>
. bitset
может быть проиндексирован с помощью []
и является шаблоном, поэтому, скорее всего, он развернется до простого unsigned int
(или эквивалент) со всеми встроенными операциями.
Другие советы
Вы учитывали std :: bitset от файла заголовка <bitset>
?
Пример:
#include <iostream>
#include <bitset>
int main() {
std::bitset<25> bits(146);
std::cout << bits << std::endl;
//using operator[] to access individual bit manually!
for(size_t i = 0 ; i < bits.size() ; ++i)
std::cout << bits[i] << " ";
return 0;
}
.
Выход:
0000000000000000010010010
0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.
Онлайн демонстрация: http://ideone.com/3ssf0
Рассмотрим a
Вы должны быть в состоянии использовать целочисленный тип для битовой карты, предполагая, что у него достаточно битов для вас.
Однако в стандартной библиотеке есть генеракодицетагкод.