The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Тип данных bool"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Тип данных bool"
Сообщение от ghost emailИскать по авторуВ закладки on 15-Мрт-04, 15:21  (MSK)
Hi All!
Хочу спросить, как в С работать с битами. Надо сделать 3D карту заселенности пространства атомами. Каждая позиция имеет только два значения TRUE и FALSE. Но вот типа bool в С нету. С этим типом надо выполнять четыре операции - запись, чтение, сравнение, доступ к произвольному элементу.
С int это выглядит где-то так,

int ***map,i;
....
map[x][y][z]=i;
i=map[x][y][z];
if (!i) ....
else    ....

а как это сделать для такого типа?
Дело в том, что размер карты порядка 10^8-10^9 ячеек и экономия памяти при переходе с int или char на bool достаточно ощутимая.
Спасибо большое.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Тип данных bool"
Сообщение от genie Искать по авторуВ закладки on 16-Мрт-04, 00:13  (MSK)
Vo-pervyh, tip bool v C++ - eto char, prinimauchii znacheniya 0 i 1 - tak chto mozhesh ego smodelirovat' tak:

typedef char bool;
i budet tebe schast'e... No ne pomozhet eto, potomu kak karta u tebya sil'no bol'shaya... Perehod na bitovye operacii dast vyigrysh, no ochen' nesuschestvennyi....


>Hi All!
>Хочу спросить, как в С работать с битами. Надо сделать 3D карту
>заселенности пространства атомами. Каждая позиция имеет только два значения TRUE и
>FALSE. Но вот типа bool в С нету. С этим типом
>надо выполнять четыре операции - запись, чтение, сравнение, доступ к произвольному
>элементу.
>С int это выглядит где-то так,
>
>int ***map,i;
>....
>map[x][y][z]=i;
>i=map[x][y][z];
>if (!i) ....
>else    ....
>
>а как это сделать для такого типа?
>Дело в том, что размер карты порядка 10^8-10^9 ячеек и экономия памяти
>при переходе с int или char на bool достаточно ощутимая.
>Спасибо большое.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Тип данных bool"
Сообщение от ghost emailИскать по авторуВ закладки on 16-Мрт-04, 11:23  (MSK)
>Vo-pervyh, tip bool v C++ - eto char, prinimauchii znacheniya 0 i
>1 - tak chto mozhesh ego smodelirovat' tak:
>
>typedef char bool;
>i budet tebe schast'e... No ne pomozhet eto, potomu kak karta u
>tebya sil'no bol'shaya... Perehod na bitovye operacii dast vyigrysh, no ochen'
>nesuschestvennyi....

Спасибо. А будет ли ощутимый выиграш в скорости при переходе с int на bool? Я имею в виду, что побитовое сравнение быстрее чем сравнение двух чисел.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Тип данных bool"
Сообщение от игорь emailИскать по авторуВ закладки on 16-Мрт-04, 13:27  (MSK)
ну битовые поля допустим.
struct byte
{

};

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Тип данных bool"
Сообщение от игорь emailИскать по авторуВ закладки on 16-Мрт-04, 13:43  (MSK)
чёрт. промахнулся по клавише.
1.в общем битовые поля:
struct
{
   unsigned int a: 1;
   unsigned int b: 1;
   unsigned int c: 1;
   ...
   unsigned int h: 1;
}flags;
переменная flags которая содержит 8 однобитовых полей.
2.набор масок:
enum { A=01, B=02, C=04 };
числа-степени двойки. тогда доступ к битам через побитовые опреации.
flags |= B | C;
ставит 1 во 2 , 3 битах.
flags &= ~( A | B );
обнуляет их.

в общем выкручивайся.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Тип данных bool"
Сообщение от Lamr emailИскать по авторуВ закладки on 16-Мрт-04, 14:45  (MSK)
Кстати о птичках - во многих реализация типа bool
никто не транслирует эти переменные в биты.
Выделяют для переменной байт или слово, чтобы не гемарроиться

Так что экономию в памяти можешь и не получить

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Тип данных bool"
Сообщение от genie Искать по авторуВ закладки on 17-Мрт-04, 02:37  (MSK)
Ekonomii v skorosti ne budet nikakoi - skoree vsego proigraesh. Ya by predlozhil tebe ne zamorachivat'sya, a sdelat' karu na char i hranit' ee v memory-mapped file.


>Кстати о птичках - во многих реализация типа bool
>никто не транслирует эти переменные в биты.
>Выделяют для переменной байт или слово, чтобы не гемарроиться
>
>Так что экономию в памяти можешь и не получить


  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Тип данных bool"
Сообщение от ghost emailИскать по авторуВ закладки on 17-Мрт-04, 12:56  (MSK)
>Ekonomii v skorosti ne budet nikakoi - skoree vsego proigraesh. Ya by
>predlozhil tebe ne zamorachivat'sya, a sdelat' karu na char i hranit'
>ee v memory-mapped file.
>
>
>>Кстати о птичках - во многих реализация типа bool
>>никто не транслирует эти переменные в биты.
>>Выделяют для переменной байт или слово, чтобы не гемарроиться
>>
>>Так что экономию в памяти можешь и не получить

А если надо искать в карте геометрические фигуры, то я надеялся сделать грубую прикидку соответствие объемов фрагментов, просто читая карту как long или int.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Тип данных bool"
Сообщение от ghost emailИскать по авторуВ закладки on 17-Мрт-04, 12:56  (MSK)
>Ekonomii v skorosti ne budet nikakoi - skoree vsego proigraesh. Ya by
>predlozhil tebe ne zamorachivat'sya, a sdelat' karu na char i hranit'
>ee v memory-mapped file.
>
>
>>Кстати о птичках - во многих реализация типа bool
>>никто не транслирует эти переменные в биты.
>>Выделяют для переменной байт или слово, чтобы не гемарроиться
>>
>>Так что экономию в памяти можешь и не получить

Надо искать в карте геометрические фигуры, и я надеялся сделать грубую прикидку соответствия объемов фрагментов, просто читая карту как long или int.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Тип данных bool"
Сообщение от ghost emailИскать по авторуВ закладки on 17-Мрт-04, 12:49  (MSK)
>чёрт. промахнулся по клавише.
>1.в общем битовые поля:
>struct
>{
>   unsigned int a: 1;
>   unsigned int b: 1;
>   unsigned int c: 1;
>   ...
>   unsigned int h: 1;
>}flags;
>переменная flags которая содержит 8 однобитовых полей.
>2.набор масок:
>enum { A=01, B=02, C=04 };
>числа-степени двойки. тогда доступ к битам через побитовые опреации.
>flags |= B | C;
>ставит 1 во 2 , 3 битах.
>flags &= ~( A | B );
>обнуляет их.
>
>в общем выкручивайся.

Ага, как сравнивать понятно, а вот как добраться  до нужного элемента? Если в массиве три измерения, то как найти нужный элемент и как выбрать для него нужный флаг?
Спасибо, очень интересный ответ.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Тип данных bool"
Сообщение от Мартовский заец emailИскать по авторуВ закладки on 23-Апр-04, 21:54  (MSK)
Попробуй сильно разреженную матрицу?
Типа не матрицу с пустыми полями храни, а тока ЗАПОЛНЕННЫЕ поля с прямо указанными координатами... Экономишь память в некоторых случаях... Да и сортировать поразному координаты можно?

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру