![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 23.03.2009
Сообщений: 15
|
![]()
Как создать целочисленный тип данных, который принимает значение только 0 или 1 и каждая переменная данного типа весит один бит. Или может уже есть такой тип данных?..
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Никак. Бит не является адресуемой единицей данных. Используйте тип bool (в последних версиях С++ имеется, раньше использовался тип int) и не занимайтесь глупостями
![]() |
![]() |
![]() |
![]() |
#3 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]()
Можно создать битовое поле
Код:
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Ну да. Компилятор все равно до 4 байт выровняет размер. Если нужно несколько переменных битовых, то можно просто создать переменную int и побитовыми операциями устанавливать/сбрасывать нужные биты.
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 26.01.2009
Сообщений: 112
|
![]()
STL bitset или
vector<bool> - тоже может занимать один бит, а может и не занимать ![]() STL bitset - размер фиксирован и задается константой. Последний раз редактировалось ("")(Э_Є)(""); 25.03.2009 в 09:02. |
![]() |
![]() |
![]() |
#6 | |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]() Цитата:
![]() Использовать битовое поле то проще ![]() ("")(Э_Є)(""), ровно 1 бит занимать переменная никак не может, ибо, как сказано выше, бит не является адресуемой единицей
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Я просто не знал про bitset и что vector<bool> - частный случай и там 1 элемент должен занимать 1 бит (при правильной реализации). Но и там, как я понял, используется что-то вроде предложенного мной способа, только самому не надо велосипед изобретать.
|
![]() |
![]() |
![]() |
#8 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]()
Я тоже не знал про это, но уж явно, в итоге размер переменной будет не менее 1 байта
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
![]()
zgest, все зависит от задачи. Если тебе нужен десяток флагов, используй обычный bool и не парься. Если речь идет о тысячах-миллионах флагов, бери готовый (или напиши свой) класс битового буфера, который будет сразу выделять память под все биты и иметь операции для обращения к конкретным битам.
|
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]() Цитата:
В общем, судя по всему, там действительно 1 бит хранится в 1 бите, ну + "хвост" в слове, если число хранимых бит не кратно размеру слова. Вот в Visual Studio 2005 покопался в исходниках bitset: Код:
А вот установка значения бита: Код:
Последний раз редактировалось pu4koff; 25.03.2009 в 14:16. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? | An_ton | SQL, базы данных | 5 | 16.01.2009 17:55 |
Как мне создать свой тип данных | PilGrim | Общие вопросы .NET | 1 | 05.11.2008 19:12 |
Как создать базу данных? | LeonKing | Помощь студентам | 4 | 07.05.2008 14:11 |
как правильно поставить тип данных? | RedWolf | Помощь студентам | 4 | 29.12.2007 11:18 |
Как создать базу данных | knazty | Помощь студентам | 15 | 18.11.2007 19:49 |