реклама на сайте
подробности

 
 
> Переменная типа bool, Как правильно создать
Wiener
сообщение Sep 1 2008, 12:47
Сообщение #1


Участник
*

Группа: Почетный участник
Сообщений: 42
Регистрация: 30-01-06
Из: Москва
Пользователь №: 13 758



Всем доброго времени суток.
Пишу на C под CW6.1 и столкнулся с отсутствием типа bool как таковой.
Вернее тип есть, если подключить библиотеку, но при этом по факту переменная получается int и соответственно занимает 2 байта (1 байт если беззнаковый).
Как правильно создать тип bool, для работы именно на уровне битов, а то занимать кучу памяти для регистров состояния накладно.
Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Wiener
сообщение Sep 11 2008, 10:46
Сообщение #2


Участник
*

Группа: Почетный участник
Сообщений: 42
Регистрация: 30-01-06
Из: Москва
Пользователь №: 13 758



Решение найдено.
Код
typedef struct {
char b0:1;
...
char b7:1;
} bit1byte;

bit1byte Status;

if (Status.b0 = 0x1) { // BRSET
...
}

Status:b0 = 0x1; // BSET

При этом можно использовать и больше одного байта для флагов.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 11 2008, 11:09
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Wiener @ Sep 11 2008, 13:46) *
Решение найдено.
Ваше решение называется bitfields. Я вам о нем написал в первом же ответе.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 15 2008, 07:04
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Sep 11 2008, 15:09) *
... Я вам о нем написал в первом же ответе.

Поразительно, как часто люди забывают, что нужно не только писать вопросы, но и читать ответы :-)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016